Bir komut farklı argümanlarla tekrar tekrar nasıl çalıştırılır?


11

Ubuntu'dayım. Bazı argümanları kopyaladım (satırsonu ile ayrılmış) ve bunları yazdırmak için xsel'i kullanabilirim

$ xsel
arg1
arg2
arg3
arg4
...

Şimdi, bu argümanların her birini başka bir komut için kullanmak ve bu komutu argümanlar olduğu kadar çalıştırmak istiyorum.

Ben de denedim

$ xsel | mycommand "constantArgument" $1

Ancak, bu mycommandsadece ilk argüman için yürütüldü . Her argüman için nasıl yürütebilirim?


Soruyu, mycommand için birden fazla argüman olduğu gerçeğini yansıtacak şekilde düzenledi.
Wes

Yanıtlar:


12

Sadece kullanabilirsiniz xargs

xsel | xargs -n1 echo mycommand 

-n1 mycommand için bir arg anlamına gelir, ama sadece kuru çalışma, ne çalıştırılacağını gösterir, onu kaldırır echo

Sabit Argüman için

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

"Mycommand", xsel'in yalnızca bir argüman içerdiği birden fazla argüman beklerse ne olur?
Wes

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

xsel | xargs -n2 echo mycommandkomuta başına iki arg
Rahul Patil

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

Veya benzeri. xargsKomut satırı argümanlarının manipülasyonu için çok güçlü bir komut olan da kullanabilirsiniz .


1

Biraz özelleştirilebilirlik için:

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

-noexecuteBayrağı nasıl çalıştığını gördükten sonra kaldırabilirsiniz .

Sizin için çalışıyorsa, shtamamen düşebilir ve bunun yerine bunu yapabilirsiniz:

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

Veya daha hızlı:

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

Her iki şekilde de kolay ve yapacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.