
Есть ли способ фактически выполнить результаты команды оболочки, вместо того чтобы использовать их в качестве аргументов другой команды?
Например, я хотел бы запустить «--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
решение4
чтобы переоценить вывод оболочки как ввод оболочки, используйте eval
.
eval "$(your command here)"