Verwenden der Befehlsersetzung zum Ausführen mehrerer Befehle

Verwenden der Befehlsersetzung zum Ausführen mehrerer Befehle

Ich versuche in Bash ein Skript zu schreiben, foodas, wenn ich es ausführe $(foo), das Verzeichnis ändert und ein Skript mit ausführt source. Der Inhalt von foo:

echo cd bar
echo "&&"
echo source baz

Wenn ich ausführe $(foo), wechselt es das Verzeichnis zu „bar“, aber es wird nicht ausgeführt source baz. Gibt es eine Möglichkeit, dies zu erreichen?

Antwort1

Sie benötigen evaldie Ausgabe:

eval $(foo)

Andernfalls &&wird (oder ein anderes ähnliches Sprachelement) so behandelt, als wäre es in Anführungszeichen gesetzt: ein reguläres Argument für cd.

$ echo $(foo)
cd bar && source baz

Wenn das führende übersprungen wird echo, wird dies cdmit den vier Argumenten ausgeführt bar && source bazund alle außer dem ersten werden stillschweigend gelöscht.

Antwort2

Sie könnenAliase(siehe auch:Mann bash), um das zu tun, was Sie versuchen.

alias foo='cd bar && source baz'

ändert das Verzeichnis zu bar und die Quelle baz, wenn Sie foo ausführen.

verwandte Informationen