J'ai un scénario. myScript
.
Il faut deux arguments. myScript arg1 arg2
.
Disons que j'ai trois séries d'arguments.
argA1 argB1
argA2 argB2
argA3 argB3
Existe-t-il un moyen de diriger chaque ligne vers myScript. Je suis ouvert à l'idée d'avoir l'ensemble des arguments dans un fichier, peut-être utiliser xargs. Je ne sais pas sur quoi enquêter.
Donc, je lancerais la commande comme un faux exemple ci-dessous :
cat myFile | xargs > myScript
Pour ne pas avoir un autre script, juste des commandes sur la ligne de commande.
Réponse acceptée :
Juste :
xargs -l1 <myFile myScript
-l1
indique xargs
pour exécuter myScript
une fois pour chaque 1
l
ligne d'entrée, avec les mots dessus 1
l
ine passé en tant qu'arguments séparés.
Pour xargs
, les mots sont séparés par des espaces et vous pouvez toujours avoir des espaces (même des nouvelles lignes) dans un mot en utilisant des guillemets. Notez cependant que tant que xargs
supporte "..."
, '...'
et \
pour citer comme la plupart des shells, son analyse est différente de celle des shells de type Bourne. En particulier, il n'y a pas de traitement antislash dans ni "..."
ni '...'
et seulement \
peut échapper une nouvelle ligne.
Par exemple, myFile
pourrait contenir :
word1.1 word1.2
"word 2.1" 'word 2.2'
"word'3.1" 'word"3.2'
'word"'"4'1" word\"4\'2
'word '\
5.1 "word "\
5.2
Et
xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'
produirait :
First word: "word1.1", second word: "word1.2"
First word: "word 2.1", second word: "word 2.2"
First word: "word'3.1", second word: "word"3.2"
First word: "word"4'1", second word: "word"4'2"
First word: "word
5.1", second word: "word
5.2"
Avec l'implémentation GNU de xargs
, vous pouvez l'améliorer pour :
xargs -l1 -r -a myFile myScript
Ce qui a l'avantage de laisser stdin seul et de ne pas exécuter myScript
si myFile
est vide.