
Gibt es eine Möglichkeit, Ergebnisse eines Shell-Befehls tatsächlich auszuführen, anstatt sie als Argumente für einen anderen Befehl zu verwenden?
Ich möchte beispielsweise „--version“ für alle ausführbaren Dateien in einem Ordner ausführen, etwa so:
ls /usr/bin/ | --version
Ich habe mit find/exec eine Möglichkeit gefunden:
find /usr/ -name valgrind -exec {} --version \;
Aber ich würde es gerne mit ls machen. Ich habe über 45 Minuten gesucht und kann keine Hilfe finden.
Antwort1
Versuchen Sie Folgendes:
printf '%s\n' /usr/bin/* | while IFS= read -r cmd; do "$cmd" --version; done
Antwort2
Wenn Sie versuchen, jede ausführbare Datei in einem bestimmten Verzeichnis mit einer Option auszuführen --version
, versuchen Sie diesen Einzeiler (mit /usr/bin als Beispielverzeichnis):
for f in /usr/bin/*; do [ -x "$f" ] && $f --version; done
Antwort3
Antwort4
um die Shell-Ausgabe als Shell-Eingabe neu auszuwerten, verwenden Sie eval
.
eval "$(your command here)"