Wie bringe ich xargs dazu, mir die Befehlszeilen anzuzeigen, die generiert werden, ohne sie auszuführen?

16

Eine ganze Reihe von Linux-Befehlen verfügen über eine Trockenlaufoption, die Ihnen zeigt, was sie tun werden, ohne dies zu tun. Ich sehe nichts in der Manpage von xargs, das dies tut und keine offensichtliche Möglichkeit, es zu emulieren.

(Mein spezieller Anwendungsfall ist die Fehlerbehebung bei langen Pipelines, obwohl ich mir sicher bin, dass es noch andere gibt.)

Vermisse ich etwas?

Andrew
quelle
Was genau versuchst du zu tun?
Rahul

Antworten:

16

Setzen Sie ein echovor dem Befehl auszuführen?

$ echo a b c d e | xargs -n2 echo rm
rm a b
rm c d
rm e
ilkkachu
quelle
5
(Dies ist natürlich nur eine einfache Lösung, die in trivialen Fällen funktioniert. Die Ausgabe ist mehrdeutig, wenn die Parameter Leerzeichen oder Steuerzeichen enthalten. Wir benötigen ein spezielles Tool, um die empfangenen Parameter eindeutig auszudrucken.)
ilkkachu
Was ist, wenn Sie versuchen, trocken zu laufen echo? :)
Mbigras
27

Sie können von den Flaggen -poder profitieren -t.

xargs -poder xargs --interactivedruckt den auszuführenden Befehl aus und fordert dann zur Eingabe auf (j / n), um vor dem Ausführen des Befehls zu bestätigen.

% cat list
one
two
three

% ls
list

% cat list | xargs -p -I {} touch {}
touch one ?...y
touch two ?...n
touch three ?...y

% ls
list
one
three

xargs -toder xargs --verbosegibt jeden Befehl aus und führt ihn sofort aus:

% cat list | xargs -t -I {} touch {}
touch one 
touch two 
touch three 

% ls
list
one
three
two
Kevin Hencke
quelle
1
hervorragende Antwort mit beiden -pund -tOptionen. ausgezeichnete Beispiele. Danke!
JCotton