Rufen Sie das Programm so auf:
(cd /c; /a/helloworld)
Die Klammern bewirken, dass eine Sub-Shell erzeugt wird. Diese Sub-Shell ändert dann ihr Arbeitsverzeichnis in /c
, führt dann helloworld
aus ab /a
. Nachdem das Programm beendet wurde, wird die Sub-Shell beendet und Sie kehren zum Prompt der übergeordneten Shell in dem Verzeichnis zurück, von dem aus Sie gestartet wurden.
Fehlerbehandlung: Um zu vermeiden, dass das Programm ausgeführt wird, ohne das Verzeichnis geändert zu haben, z. wenn /c
falsch geschrieben wurde , führen Sie die Ausführung von helloworld
durch bedingt:
(cd /c && /a/helloworld)
Reduzierung der Speichernutzung: Rufen Sie helloworld
auf, um zu vermeiden, dass die Subshell während der Ausführung von hello world Speicherplatz verschwendet über exec:
(cd /c && exec /a/helloworld)
[Danke an Josh und Juliano für die Tipps zur Verbesserung dieser Antwort!]
Ähnlich wie David Schmitts Antwort, plus Joshs Vorschlag, aber lässt keinen Shell-Prozess laufen:
(cd /c && exec /a/helloworld)
Dieser Weg ähnelt eher dem, wie Sie normalerweise Befehle auf der Shell ausführen. Um den praktischen Unterschied zu sehen, müssen Sie ps ef
ausführen von einer anderen Shell mit jeder Lösung.
Eine Option, die keine Subshell benötigt und in Bash integriert ist
(pushd SOME_PATH && run_stuff; popd)
Demo:
$ pwd
/home/abhijit
$ pushd /tmp # directory changed
$ pwd
/tmp
$ popd
$ pwd
/home/abhijit