Solução feita por OP
Nenhum comando interno encontrado aqui. Mas finalmente eu sou capaz de escrever um programa em C para usar cd (vamos chamar meu programa icd == (inode cd)) para entrar em uma pasta usando o valor inode. Aqui estou postando o código bruto.
Mas há um problema fundamental que enfrentei aqui. Durante a codificação, execute um código C de um bash necessário para criar o processo filho sob o processo bash (processo pai). A partir do processo filho, o espaço de diretório é novo e não posso acessar o espaço de diretório do processo pai a partir dele. Então, nada poderia ser feito, exceto invocar uma nova janela bash a partir daqui. No futuro, tentarei implementar um novo recurso de guia se as pessoas estiverem interessadas nisso. Mas acredito que enfrentei muitas críticas por fazer isso. Então as pessoas podem não estar interessadas. Acabei de fazer pela minha diversão.
O código RAW é compartilhado aqui,
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include<dirent.h>
#include <unistd.h>
#include <grp.h>
#include<pwd.h>
using namespace std ;
int main(int argc , char *argv[] ) {
struct stat ITR ;
if( argc != 2 ) {
printf("\nWrong Command\n\n") ;
return 1 ;
}
long long given_inode = 0 ;
for( int i =0 ; argv[1][i] ; i++ ){
given_inode *= 10 ;
given_inode += (argv[1][i]-'0') ;
}
// if (stat(argv[1], &ITR) == -1) {
// perror("stat");
// return 1 ;
// }
printf("%s\n",argv[0]) ;
char PWD[1000] ;
getcwd( PWD , 1000 ) ;
DIR *d;
struct dirent *p;
char path[100000] ;
d = opendir(".");
if( d != NULL ) {
while( (p = readdir(d))!= NULL ) {
strcpy( path , "./" ) ;
strcat( path, p->d_name ) ;
stat(path, &ITR) ;
//printf("%s --> ",path) ;
//printf("%ld\n",ITR.st_ino) ;
if( ITR.st_ino == given_inode ) {
strcpy( path , "gnome-terminal --working-directory=" ) ;
strcat( path, PWD ) ;
strcat( path, "/" ) ;
strcat( path, p->d_name ) ;
system(path) ;
//printf("%s\n",path) ;
return 0 ;
}
}
}
printf("icd %lld:No such file or directory\n",given_inode) ;
return 0 ;
}
Estou usando o terminal do gnome aqui. Obviamente, para outra distro o código será alterado.