Eu gostaria de poder executar vários comandos no mesmo arquivo em uma única linha. A maneira como atualmente faço isso é:
commandA file && commandB file && perl -ne '...' file
Meu instinto me diz que deve haver uma maneira de fornecer o argumento do nome do arquivo apenas uma vez e canalizá-lo para os dois comandos simultaneamente xargs
ou algo semelhante:
find file | xargs commandA && xargs commandB && xargs perl -ne '...'
Quando tento isso, apenas o primeiro comando é executado. Como posso conseguir o que quero fazer?
command-line
Zaid
fonte
fonte
Para shells como Bash, Korn e Z que têm substituição de processo, você pode fazer isso:
fonte
Você pode usar xargs para construir uma linha de comando, por exemplo:
Basta colocar o acima no bash para executá-lo:
Estendendo o exemplo para todos os arquivos * .c no diretório atual (escapando do ls aqui para impedir qualquer substituição de alias do shell):
fonte
find . -name "*enums*" | xargs -i echo -e echo {}\; ls -lh {}\; echo -e '\n\n' | bash
Eu não votaria nisso. É bobo e perigoso, mas apenas no interesse de listar as maneiras de fazer isso, há:
for cmd in "commandA" "commandB" "perl -ne '...'" ; do eval $cmd file ; done
fonte