J'aimerais pouvoir exécuter plusieurs commandes sur le même fichier sur une seule ligne. La façon dont je le fais actuellement est la suivante:
commandA file && commandB file && perl -ne '...' file
Mon instinct me dit qu'il devrait y avoir un moyen de fournir l'argument du nom de fichier une seule fois et de le diriger vers les deux commandes simultanément via xargs
ou quelque chose de similaire:
find file | xargs commandA && xargs commandB && xargs perl -ne '...'
Lorsque j'essaie, seule la première commande s'exécute. Comment puis-je réaliser ce que je veux faire?
command-line
Zaid
la source
la source
Pour les shells tels que Bash, Korn et Z qui ont une substitution de processus, vous pouvez faire ceci:
la source
Vous pouvez utiliser xargs pour construire une ligne de commande, par exemple:
Il suffit de diriger ce qui précède dans bash pour l'exécuter:
Extension de l'exemple à tous les fichiers * .c du répertoire courant (échappement du ls ici pour éviter toute substitution d'alias shell):
la source
find . -name "*enums*" | xargs -i echo -e echo {}\; ls -lh {}\; echo -e '\n\n' | bash
Je ne voterais pas pour ça moi-même. C'est idiot et dangereux, mais juste dans l'intérêt de lister les façons de faire, il y a:
for cmd in "commandA" "commandB" "perl -ne '...'" ; do eval $cmd file ; done
la source