Я хотел бы иметь возможность запускать несколько команд для одного файла в одной строке. То, как я сейчас делаю это:
commandA file && commandB file && perl -ne '...' file
Мой инстинкт интуиции говорит мне, что должен быть способ предоставить аргумент имени файла только один раз и передать его обеим командам одновременно xargs
или что-то подобное:
find file | xargs commandA && xargs commandB && xargs perl -ne '...'
Когда я пытаюсь это сделать, запускается только первая команда. Как я могу достичь того, что я хочу сделать?
command-line
Зайд
источник
источник
Для оболочек, таких как Bash, Korn и Z, которые имеют подстановку процессов, вы можете сделать это:
источник
Вы можете использовать xargs для создания командной строки, например:
Просто запишите вышеприведенное в bash, чтобы запустить его:
Расширение примера на все файлы * .c в текущем каталоге (экранирование ls здесь для предотвращения подстановки псевдонимов оболочки):
источник
find . -name "*enums*" | xargs -i echo -e echo {}\; ls -lh {}\; echo -e '\n\n' | bash
Я бы не стал голосовать за это сам. Это глупо и опасно, но в интересах перечисления способов сделать это есть:
for cmd in "commandA" "commandB" "perl -ne '...'" ; do eval $cmd file ; done
источник