¿Cómo ejecuto un comando Shell incorporado con una función C?

Me gustaría ejecutar el comando de Linux “pwd” a través de una función de lenguaje C como execv ().

El problema es que no hay un archivo ejecutable llamado “pwd” y no puedo ejecutar “echo $ PWD”, ya que echo también es un comando incorporado sin ningún ejecutable que encontrar.

Debería ejecutar sh -c echo $PWD ; generalmente sh -c ejecutará comandos de shell.

(De hecho, el system(foo) se define como execl("sh", "sh", "-c", foo, NULL) y, por lo tanto, funciona para built-in de shell.

Si solo quieres el valor de PWD , usa getenv .

Si solo desea ejecutar el comando de shell en su progtwig c, puede usar,

  #include  int system(const char *command); 

En tu caso,

 system("pwd"); 

El problema es que no hay un archivo ejecutable llamado “pwd” y no puedo ejecutar “echo $ PWD”, ya que echo también es un comando incorporado sin ningún ejecutable que encontrar.

¿Qué quiere decir con esto? Debería poder encontrar los paquetes mencionados en / bin /

 sudo find / -executable -name pwd sudo find / -executable -name echo 

Puedes usar el comando excecl

 int execl(const char *path, const char *arg, ...); 

Como se muestra aquí

 #include  #include  #include  int main (void) { return execl ("/bin/pwd", "pwd", NULL); } 

El segundo argumento será el nombre del proceso tal como aparecerá en la tabla de proceso.

Alternativamente, puede usar la función getcwd () para obtener el directorio de trabajo actual:

 #include  #include  #include  #define MAX 255 int main (void) { char wd[MAX]; wd[MAX-1] = '\0'; if(getcwd(wd, MAX-1) == NULL) { printf ("Can not get current working directory\n"); } else { printf("%s\n", wd); } return 0; }