Ich versuche in Bash ein Skript zu schreiben, foo
das, 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 eval
die 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 cd
mit den vier Argumenten ausgeführt bar && source baz
und alle außer dem ersten werden stillschweigend gelöscht.