tengo un guion myScript
.
Se necesitan dos argumentos. myScript arg1 arg2
.
Digamos que tengo tres conjuntos de argumentos.
argA1 argB1
argA2 argB2
argA3 argB3
¿Hay alguna manera de canalizar cada línea a myScript. Estoy abierto a tener el conjunto de argumentos en un archivo, tal vez use xargs. No estoy seguro de qué investigar.
Así que ejecutaría un comando como el ejemplo falso a continuación:
cat myFile | xargs > myScript
No tener otro script, solo comandos en la línea de comandos.
Respuesta aceptada:
Solo:
xargs -l1 <myFile myScript
-l1
le dice a xargs
para ejecutar myScript
una vez por cada 1
l
línea de entrada, con las palabras en ese 1
l
ine pasado como argumentos separados.
Para xargs
, las palabras se separan con espacios en blanco, y aún puede tener espacios en blanco (incluso saltos de línea) en una palabra usando comillas. Tenga en cuenta, sin embargo, que mientras xargs
admite "..."
, '...'
y \
para citar como la mayoría de los shells, su análisis es diferente al de los shells tipo Bourne. En particular, no hay procesamiento de barra invertida ni en "..."
ni '...'
y solo \
puede escapar de una nueva línea.
Por ejemplo, myFile
podría contener:
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
Y
xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'
produciría:
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"
Con la implementación GNU de xargs
, puedes mejorarlo a:
xargs -l1 -r -a myFile myScript
Lo cual tiene la ventaja de dejar stdin solo y de no ejecutar myScript
if myFile
está vacío.