Mám scénář. myScript
.
Chce to dva argumenty. myScript arg1 arg2
.
Řekněme, že mám tři sady argumentů.
argA1 argB1
argA2 argB2
argA3 argB3
Existuje způsob, jak spojit každý řádek do myScriptu. Jsem otevřený mít sadu args v souboru, možná použijte xargs. Nejste si jisti, co vyšetřovat.
Takže bych spustil příkaz jako faux příklad níže:
cat myFile | xargs > myScript
Nemít další skript, jen příkazy na příkazovém řádku.
Přijatá odpověď:
Jen:
xargs -l1 <myFile myScript
-l1
říká xargs
ke spuštění myScript
jednou za každý 1
l
ine vstupu se slovy na tomto 1
l
ine předán jako samostatné argumenty.
Pro xargs
, slova jsou oddělena mezerami a stále můžete mít mezery (dokonce i nové řádky) ve slovech pomocí uvozovek. Všimněte si však, že zatímco xargs
podporuje "..."
, '...'
a \
pro citaci jako u většiny shellů, jeho analýza se liší od analýzy Bourne-like shellů. Zejména v "..."
není žádné zpracování zpětného lomítka ani '...'
a pouze \
může uniknout novému řádku.
Například myFile
může obsahovat:
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
A
xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'
by produkovalo:
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"
S GNU implementací xargs
, můžete jej vylepšit na:
xargs -l1 -r -a myFile myScript
Což má tu výhodu, že nechá stdin na pokoji a nespouští myScript
if myFile
je prázdný.