Ich habe ein Skript. myScript
.
Es dauert zwei Argumente. myScript arg1 arg2
.
Nehmen wir an, ich habe drei Arten von Argumenten.
argA1 argB1
argA2 argB2
argA3 argB3
Gibt es eine Möglichkeit, jede Zeile an myScript weiterzuleiten. Ich bin offen dafür, den Satz von Argumenten in einer Datei zu haben, vielleicht verwende ich xargs. Nicht sicher, was untersucht werden soll.
Also würde ich einen Befehl wie das folgende Faux-Beispiel ausführen:
cat myFile | xargs > myScript
Kein anderes Skript zu haben, nur Befehle auf der Kommandozeile.
Akzeptierte Antwort:
Nur:
xargs -l1 <myFile myScript
-l1
sagt xargs
um myScript
auszuführen einmal für jede 1
l
Eingabezeile mit den Worten auf diesem 1
l
werden als separate Argumente übergeben.
Für xargs
, Wörter werden durch Leerzeichen getrennt, und Sie können immer noch Leerzeichen (sogar Zeilenumbrüche) in einem Wort haben, indem Sie Anführungszeichen verwenden. Beachten Sie jedoch, dass während xargs
unterstützt "..."
, '...'
und \
denn wie bei den meisten Shells unterscheidet sich das Parsing von Bourne-ähnlichen Shells. Insbesondere gibt es keine Backslash-Verarbeitung in weder "..."
noch '...'
und nur \
kann einem Zeilenumbruch entkommen.
Zum Beispiel myFile
könnte enthalten:
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
Und
xargs -l1 <myFile printf 'First word: "%s", second word: "%s"\n'
würde produzieren:
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"
Mit der GNU-Implementierung von xargs
, können Sie es verbessern zu:
xargs -l1 -r -a myFile myScript
Das hat den Vorteil, dass stdin in Ruhe gelassen wird und myScript
nicht ausgeführt wird wenn myFile
ist leer.