Chciałbym móc uruchomić wiele poleceń w tym samym pliku w jednym wierszu. Obecnie to robię:
commandA file && commandB file && perl -ne '...' file
Mój instynkt podpowiada mi, że powinien istnieć sposób na podanie argumentu nazwy pliku tylko raz i przesłanie go do obu poleceń jednocześnie xargs
lub coś podobnego:
find file | xargs commandA && xargs commandB && xargs perl -ne '...'
Kiedy próbuję, uruchamiane jest tylko pierwsze polecenie. Jak mogę osiągnąć to, co chcę zrobić?
command-line
Zaid
źródło
źródło
W przypadku powłok takich jak Bash, Korn i Z, które mają podstawianie procesów, możesz to zrobić:
źródło
Możesz użyć xargs do zbudowania linii poleceń, np .:
Po prostu potokuj powyższe w bash, aby go uruchomić:
Rozszerzając przykład na wszystkie pliki * .c w bieżącym katalogu (ucieczka przed ls tutaj, aby zapobiec podstawieniu aliasu powłoki):
źródło
find . -name "*enums*" | xargs -i echo -e echo {}\; ls -lh {}\; echo -e '\n\n' | bash
Sam bym na to nie głosował. Jest to głupie i niebezpieczne, ale tylko w celu podania sposobów na zrobienie tego, są:
for cmd in "commandA" "commandB" "perl -ne '...'" ; do eval $cmd file ; done
źródło