Jak wykonać polecenie wielokrotnie z różnymi argumentami?


11

Jestem na Ubuntu. Skopiowałem kilka argumentów (oddzielonych znakiem nowej linii) i mogę użyć Xsel, aby je wydrukować w ten sposób

$ xsel
arg1
arg2
arg3
arg4
...

Teraz chcę użyć każdego z tych argumentów do innego polecenia i wykonać to polecenie tyle razy, ile jest argumentów.

Więc próbowałem

$ xsel | mycommand "constantArgument" $1

Wykonano to jednak mycommandtylko dla pierwszego argumentu. Jak mogę go wykonać dla każdego argumentu?


Edytowałem pytanie, aby odzwierciedlić fakt, że moja komenda ma więcej niż jeden argument.
Wes

Odpowiedzi:


12

Możesz po prostu użyć xargs

xsel | xargs -n1 echo mycommand 

-n1 oznacza jeden argument dla mycommand, ale jest to tylko sucha próba, pokaże, co będzie uruchomione, aby go usunąć echo

Dla stałego argumentu

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}

Co jeśli „moja komenda” oczekuje więcej niż jednego argumentu, z czego xsel zawiera tylko jeden argument?
Wes

xsel | xargs -n1 echo mycommand -more-arg
Rahul Patil

xsel | xargs -n2 echo mycommanddwa arg na polecenie
Rahul Patil

7
xsel | while read line; do mycommand "$line"; done

Lub coś podobnego. Możesz także użyć xargs, która jest bardzo potężnym poleceniem do manipulacji argumentami wiersza poleceń.


1

Aby trochę dostosować:

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

Możesz usunąć -noexecuteflagę, gdy zobaczysz, jak to działa.

Jeśli to działa, możesz shcałkowicie upuścić i zrobić to zamiast tego:

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

Lub szybciej:

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

Tak czy inaczej jest łatwe i zrobi to.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.