$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
$
Ersetzen Sie geistig durch seq 1 3
einen Befehl, der Einträge pro Zeile im Standardausgang auflistet. Wie kann ich mehr oder weniger das bekommen, was Sie erwarten würden, dh die Einträge in separaten Zeilen ( echo 1; echo 2; echo 3;
)?
shell
io-redirection
xargs
Sean Allred
quelle
quelle
xargs
nicht der Befehl, den Sie brauchen. Sie verwenden zwei externe Befehleseq
jeweils umxargs
etwas zu erreichen , dass die Shell es tun können , auf sie selbst ist. Nehmen Sie zum Beispiel die Klammererweiterung in Bash. Sie könnten dann ausstellenprintf '%s\n' {1..10}
, um das gewünschte Ergebnis zu erhaltenBrewfile
for Homebrew in meinem eigenen Bootstrap-Skript . Ich bin nicht sicher, ob ich irgendwelche Funktionen der Shell verwenden kann, um die Arbeit zu erledigen.nocomment
undoneline
die zu einer Funktion kombiniertnocomment_oneline
und gesetzt werden könntesed '/^#/d;/^.$/d' "$1" | sed -e :a -e '$!N;s/\n/ /;ta'
Antworten:
Normalerweise
xargs
werden mehrere Argumente in eine Befehlszeile eingefügt. Verwenden Sie die-n
Option, um es auf jeweils ein Argument zu beschränken :Dokumentation
Von
man xargs
:Unterschied zwischen
-n
und-L
-L
ist ähnlich, hat aber eine zusätzliche Funktion: Im Gegensatz dazu-n
werden Zeilen mit nachgestellten Leerzeichen in der nächsten Zeile fortgesetzt. Beobachten:quelle
-n
und-L
unterscheiden sich in dem Anwendungsfall? Sicherlich müssen sie sich außerhalb dieses trivialen Beispiels unterscheiden.-L
unterscheidet sich darin, dass es eine nachgestellte Leerzeichenfunktion hat. Ich habe gerade ein Beispiel hinzugefügt, das dies veranschaulicht. (Ihre Antwort hat meine +1)xargs -L
? Wann ist die Funktion für nachgestellte Leerzeichen nützlich?Ein bisschen mehr Forschung ergab die Antwort von Lassen Sie xargs den Befehl einmal für jede Eingabezeile ausführen :
quelle