Wie führe ich einen Befehl wiederholt mit verschiedenen Argumenten aus?

11

Ich bin auf Ubuntu. Ich habe einige Argumente kopiert (durch Zeilenumbruch getrennt) und kann sie mit xsel so ausdrucken

$ xsel
arg1
arg2
arg3
arg4
...

Jetzt möchte ich jedes dieser Argumente für einen anderen Befehl verwenden und diesen Befehl so oft ausführen, wie es Argumente gibt.

Also habe ich es versucht

$ xsel | mycommand "constantArgument" $1

Dies wurde jedoch mycommandnur für das erste Argument ausgeführt. Wie kann ich es für jedes Argument ausführen?

Wir s
quelle
Die Frage wurde bearbeitet, um die Tatsache widerzuspiegeln, dass mycommand mehr als ein Argument enthält.
Wes

Antworten:

12

Sie können einfach verwenden xargs

xsel | xargs -n1 echo mycommand 

-n1 bedeutet ein Argument für mycommand, aber es ist nur ein Trockenlauf, es zeigt, was ausgeführt werden soll, um es zu entfernen echo

Für ständiges Argument

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}
Rahul Patil
quelle
Was ist, wenn "mycommand" mehr als ein Argument erwartet, von dem das xsel nur ein Argument enthält?
Wes
xsel | xargs -n1 echo mycommand -more-arg
Rahul Patil
xsel | xargs -n2 echo mycommandzwei arg pro Befehl
Rahul Patil
7
xsel | while read line; do mycommand "$line"; done

Oder etwas ähnliches. Sie können auch xargseinen sehr leistungsstarken Befehl zum Bearbeiten von Befehlszeilenargumenten verwenden.

Orion
quelle
1

Für eine kleine Anpassbarkeit:

printf "${CMD} %s ${ARG2}\n" `xsel` | sh -n

Sie können die -noexecuteFlagge entfernen, nachdem Sie gesehen haben, wie es funktioniert.

Wenn es für Sie funktioniert, können Sie es shganz löschen und stattdessen Folgendes tun:

. <<HERE /dev/stdin
    $(printf "${CMD} %s ${ARG2}\n" `xsel`)
HERE

Oder schneller:

printf "${CMD} %s ${ARG2}\n" `xsel` | . /dev/stdin

Jeder Weg ist einfach und wird es tun.

mikeserv
quelle