Probleme mit Wechsel vom Arbeitsverzeichniss
-
Hallo!
ich haben ein Shellscript, welches einige Programme nach einander aufruft.
--- Shellscript (script.sh)---
#!/bin/shprogramm1
programm2
programm3--- Ende Shellscript ---
programm2 ist von, da hab ich die sourcen, die anderen kann ich nich ändern. programm2 soll nun einen verzeichnisnamen vom benutzer abfragen und dann in dieses wechseln und wird dann beendet. programm3 soll nun dem verzeichniss arbeiten in welches programm2 gewechselt hat. tut es aber ja nich, da ja alle programme in unterschiedlichen prozessen laufen....nun die frage: git es irgendwas, wie ich meine programme im gleichen prozess laufen lassen kann?
so ähnlich wie:
--- Shellscript (script2.sh)---
#!/bin/shsource programm1
source programm2
soucre programm3--- Ende Shellscript ---
nur eben für c++ programme....
-
Dann musst Du eben programm2 so ändern, daß es programm3 aufruft. Dann ist programm3 ein Kind von programm2 und erbt dessen Umgebung, wie z. B. das aktuelle Verzeichnis.
-
nein, das geht leider nicht, da dazwischen noch einiges in bash gemacht wird....
Oder ich muss irgendwie das arbeitsverzeichniss meines Parentprozesses ändern mit programm2. das ginge doch bestimmt in c++ irgendwie.
-
Du kannst weder Umgebungsvariable noch das aktuelle Arbeitsverzeichnis eines anderen Prozesses ändern. Das kann nur der Prozess selbst. Das gilt auch für Vater/Kind-Beziehungen. Weder kann der Vaterprozess im Kindprozess was ändern noch der Kindprozess beim Vater.
Wenn Du ein shell-skript dazwischen hast, kannst Du über die Standardausgabe beispielsweise ein Verzeichnis ausgeben und in der shell ändern. Also etwa so:
programm2#include <iostream> int main() { std::cout << "/tmp"; }
Skiprt:
DIR=`programm2` # setze DIR auf den Wert, was programm2 ausgibt cd $DIR programm3 # jetzt läuft programm3 im Verzeichnis, welches von programm2 bestimmt wird
-
Das geht doch alles viel einfacher:
Ruf dein Programm innerhalb des Shell-Skriptes mit "." auf, dann läuft es in dem gleichen Prozess und die Änderung des aktuellen Verzeichnisses bleibt für die folgenden Programme bestehen:#!/bin/sh programm1 . programm2 programm3
-
Martin G schrieb:
Das geht doch alles viel einfacher:
Ruf dein Programm innerhalb des Shell-Skriptes mit "." auf, dann läuft es in dem gleichen Prozess und die Änderung des aktuellen Verzeichnisses bleibt für die folgenden Programme bestehen:#!/bin/sh programm1 . programm2 programm3
Geht es nicht. Das funktioniert nur, wenn programm2 auch ein Shell-Skript ist, welches dann von der aktuellen Shell interpretiert wird.