Ausführen von stdout-Ergebnissen

Ausführen von stdout-Ergebnissen

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

perlUndSchlag;

ls -1 | perl -pe 's/\n/ --version;\n/g' | bash

oderxargs;

ls -1 | xargs -I {} bash {} --version;

Antwort4

um die Shell-Ausgabe als Shell-Eingabe neu auszuwerten, verwenden Sie eval.

eval "$(your command here)"

verwandte Informationen