Выполнить результаты stdout

Выполнить результаты stdout

Есть ли способ фактически выполнить результаты команды оболочки, вместо того чтобы использовать их в качестве аргументов другой команды?

Например, я хотел бы запустить «--version» для всех исполняемых файлов в папке, что-то вроде:

ls /usr/bin/ | --version

Я нашел способ с помощью find/exec:

find /usr/ -name valgrind -exec {} --version \;

Но я хотел бы сделать это с помощью ls. Я ищу уже более 45 минут и не могу найти никакой помощи.

решение1

Попробуйте сделать это:

printf '%s\n' /usr/bin/* | while IFS= read -r cmd; do "$cmd" --version; done 

решение2

Если вы пытаетесь выполнить каждый исполняемый файл в определенном каталоге с --versionопцией, попробуйте этот однострочник (используя /usr/bin в качестве примера каталога):

for f in /usr/bin/*; do [ -x "$f" ] && $f --version; done

решение3

перлиБаш;

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

илиxargs;

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

решение4

чтобы переоценить вывод оболочки как ввод оболочки, используйте eval.

eval "$(your command here)"

Связанный контент