
Ich habe ein Bash-Skript, das eine Reihe von Befehlen ausführen soll. Die Befehle funktionieren einwandfrei, wenn sie in ein Terminal eingegeben werden, aber wenn ich versuche, sie innerhalb des Skripts auszuführen, funktionieren sie nicht. Ich gehe also davon aus, dass es sich um etwas Umgebungsspezifisches handelt.
Im Skript habe ich
exec "$cmd"
und es funktioniert nicht. Wenn ich jedoch den Inhalt von $cmd kopiere und in ein Terminal einfüge, funktioniert es einwandfrei.
Wie behalte ich die aktuelle Umgebung bei, wenn ich das Skript ausführe? Oder haben Sie eine andere Idee, was es sein könnte?
Antwort1
Fügen Sie den Befehl stattdessen in ein Array ein.
arr=(foo bar baz quux)
exec "${arr[@]}"
Antwort2
Geben Sie set -o allexport
oben in Ihrem Bash-Skript Folgendes ein. Dadurch sollten alle von Ihnen definierten Variablen automatisch exportiert werden. (Beachten Sie, dass dies als schlechter Stil gilt. Besser wäre es, nur die richtigen Variablen zu exportieren.)
Antwort3
Wenn alle Befehle aus dem gleichen Verzeichnis ausgeführt werden sollen, können Sie verwenden
cd /d $Location
am Anfang des Skripts, um den Speicherort für die auszuführenden Befehle festzulegen.
cd – Dies ist der Befehl zum Ändern des Verzeichnisses. /d – Mit diesem Schalter wechselt cd sowohl das Laufwerk als auch das Verzeichnis gleichzeitig.
Wenn Sie den Befehl beispielsweise von D:\scripts ohne /d ausführen möchten, müssen Sie
D:
cd \scripts
aber mit dem obigen Befehl können Sie es in einer Zeile tun
cd /d D:\scripts
-Nochmals bearbeiten-
Entschuldigen Sie, da steht eindeutig BASH, aber ich habe es aus irgendeinem Grund als BATCH gelesen. Ich werde in Zukunft vorsichtiger sein.