Wie führe ich einen in die Shell integrierten Befehl mit einer C-Funktion aus?

Lesezeit: 2 Minuten

Ich möchte den Linux-Befehl “pwd” über eine C-Sprachfunktion wie execv() ausführen.

Das Problem ist, dass es keine ausführbare Datei namens “pwd” gibt und ich “echo $PWD” nicht ausführen kann, da echo auch ein integrierter Befehl ist, in dem keine ausführbare Datei gefunden werden kann.

  • man bekommtcwd. Das ist alles, was Sie brauchen.

    – Charlie Burns

    6. Oktober 2013 um 14:07 Uhr

  • Charlie Burns, der virtuellen Maschine, die mir zur Verfügung gestellt wurde, fehlt ein Eintrag für getcwd. Trotzdem danke.

    – Benutzer2851770

    6. Oktober 2013 um 14:37 Uhr

  • theunixshell.blogspot.com/2013/01/…

    – Vijay

    16. April 2014 um 10:44 Uhr

Wenn Sie nur den Shell-Befehl in Ihrem C-Programm ausführen möchten, können Sie Folgendes verwenden:

   #include <stdlib.h>

   int system(const char *command);

In Ihrem Fall,

system("pwd");

Das Problem ist, dass es keine ausführbare Datei namens “pwd” gibt und ich “echo $PWD” nicht ausführen kann, da echo auch ein integrierter Befehl ist, in dem keine ausführbare Datei gefunden werden kann.

Was meinst du damit? Sie sollten in der Lage sein, die genannten Pakete zu finden /Behälter/

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

  • Ich bin noch neu in so etwas. Ich habe versucht, “what pwd” auf der Shell zu verwenden, und es wurde nur zurückgegeben, dass “pwd” ein integrierter Befehl ist. Trotzdem danke!

    – Benutzer2851770

    6. Oktober 2013 um 14:32 Uhr


  • Verzeihen Sie meine mögliche Unwissenheit, aber das wird nur mit dem Rückgabecode und nicht mit stdout zurückgegeben, richtig?

    – Jpatrick

    30. August 2019 um 15:02 Uhr

  • @Jpatrick Du hast recht. system hilft bei der Ausführung von Shell-Befehlen und ist auch in der Lage, den Rückgabecode mit ein paar anderen Systemaufrufen zu lesen. Wenn Sie die Standardausgabe des Programms lesen möchten, müssen Sie stattdessen popen() verwenden: gnu.org/software/libc/manual/html_node/…

    – sm Raj

    22. November 2019 um 22:47 Uhr

Sie sollten ausführen sh -c echo $PWD; allgemein sh -c führt Shell-Befehle aus.

(In der Tat, system(foo) ist definiert als execl("sh", "sh", "-c", foo, NULL) und funktioniert daher für Shell-Built-Ins.)

Wenn Sie nur den Wert von wollen PWDverwenden getenvobwohl.

  • Ich habe die getenv-Funktion verwendet. Vielen Dank!

    – Benutzer2851770

    6. Oktober 2013 um 14:33 Uhr

Benutzeravatar von PhillipD
PhilippD

Sie können die Funktion execl() verwenden:

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

Wie hier gezeigt:

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main (void) {

   return execl ("/bin/pwd", "pwd", NULL);

}

Das zweite Argument ist der Name des Prozesses, wie er in der Prozesstabelle erscheint.

Alternativ können Sie die Funktion getcwd() verwenden, um das aktuelle Arbeitsverzeichnis abzurufen:

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#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;
}

1393600cookie-checkWie führe ich einen in die Shell integrierten Befehl mit einer C-Funktion aus?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy