Ich habe eine Befehlszeile, die eine andere Befehlszeile ausgibt, zum Beispiel:
> commandlineA param1 param2
commandlineB param1
Ich möchte eine einzelne Befehlszeilenausführung haben, die Befehlszeile B mit den angegebenen Parametern ausführt.
Gibt es eine einfache Möglichkeit, dies über eine einzige Befehlszeile zu tun, oder muss ich eine kleine Bash-Datei ausführen, in der die Ausgabe in einer Variablen gespeichert und dann ausgeführt wird?
Vielen Dank
ubuntu
command-line
bash
Lior Ohana
quelle
quelle
Antworten:
Sie scheinen dies selbst herausgefunden zu haben, aber Sie können Folgendes verwenden:
Bearbeiten oder Bearbeiten: Das Folgende ist etwas falsch, obwohl der Befehl in einer Subshell ausgeführt wird, stellt sich heraus, dass die Umgebungsvariablen weiterhin verfügbar sind. Entschuldigung für die irreführenden Leute ...
Bearbeiten: Das wird in einer Subshell ausgeführt, nicht exportierte Umgebungsvariablen werden nicht verwendet. Wenn Sie einen Befehl in derselben Shell ausführen möchten, müssen Sie Folgendes verwenden:
Eine andere Antwort ist, durch Bash selbst zu pfeifen:
Dies wird auch in einer Subshell ausgeführt, um in derselben Shell ausgeführt zu werden, die Sie benötigen:
Im Übrigen können Sie anstelle der $ () -Syntax auch Back-Ticks verwenden, dies wird jedoch nicht empfohlen .
quelle
eval
hier zu verwenden . Wenn Sie einen Grund haben, erklären Sie ihn bitte. (3) Ihr letztes Beispiel (mit-c
) ist völlig falsch.Benutze das:
Beispiel:
Ausgabe:
quelle
$(commandlineA param1 param2)
printf '\143\144\040\057\n' | bash
ist letztendlich ein No-Op, da der Befehl in einem neuen, separaten (und vorübergehenden) Shell-Prozess ausgeführt wird. Im Gegensatz dazu wechselt$(printf '\143\144\040\057\n')
die aktuelle, aktive, interaktive Shell das Verzeichnis.