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

8

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

Das Problem ist, dass es keine ausführbare Datei mit dem Namen "pwd" gibt und ich "echo $ PWD" nicht ausführen kann, da echo auch ein eingebauter Befehl ist, der keine ausführbare Datei enthält.

>     
user2851770 06.10.2013, 13:03
quelle

3 Antworten

6

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

(Tatsächlich ist system(foo) als execl("sh", "sh", "-c", foo, NULL) definiert und funktioniert daher für Shell-Einbauten.)

Wenn Sie nur den Wert von PWD haben möchten, verwenden Sie getenv .

    
Kerrek SB 06.10.2013, 13:03
quelle
15

Wenn Sie nur den Shell-Befehl in Ihrem c-Programm ausführen möchten, können Sie

verwenden %Vor%

In Ihrem Fall

%Vor%

Das Problem ist, dass es keine ausführbare Datei namens "pwd" gibt, und ich kann "echo $ PWD" nicht ausführen, da echo auch ein eingebauter Befehl ist, der keine ausführbare Datei enthält.

Was meinst du damit? Sie sollten die genannten Pakete in / bin /

finden können %Vor%     
smRaj 06.10.2013 14:05
quelle
5

Sie können den Befehl excec

verwenden %Vor%

Wie hier gezeigt

%Vor%

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:

%Vor%     
PhillipD 06.10.2013 13:29
quelle

Tags und Links