Bagaimana cara menjalankan suatu perintah berulang kali dengan berbagai argumen?

11

Saya di Ubuntu. Saya menyalin beberapa argumen (dipisahkan oleh baris baru) dan saya dapat menggunakan xsel untuk mencetaknya seperti ini

$ xsel
arg1
arg2
arg3
arg4
...

Sekarang, saya ingin menggunakan masing-masing argumen ini untuk perintah lain dan mengeksekusi perintah itu sebanyak ada argumen.

Jadi saya mencoba

$ xsel | mycommand "constantArgument" $1

Namun, ini mycommandhanya dieksekusi untuk argumen pertama. Bagaimana saya bisa menjalankannya untuk setiap argumen?

Wes
sumber
Mengedit pertanyaan untuk mencerminkan fakta bahwa ada lebih dari satu argumen untuk perintah saya.
Wes

Jawaban:

12

Anda cukup menggunakan xargs

xsel | xargs -n1 echo mycommand 

-n1 berarti satu argumen untuk perintah saya, tapi itu hanya run kering, itu akan menunjukkan apa yang akan dijalankan, untuk menjalankannya hapus echo

Untuk Argumen konstan

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}
Rahul Patil
sumber
Bagaimana jika "perintah saya" mengharapkan lebih dari satu argumen yang darinya xsel hanya berisi satu argumen?
Wes
xsel | xargs -n1 echo mycommand -more-arg
Rahul Patil
xsel | xargs -n2 echo mycommanddua arg per perintah
Rahul Patil
7
xsel | while read line; do mycommand "$line"; done

Atau yang serupa. Anda juga dapat menggunakan xargs, yang merupakan perintah yang sangat kuat untuk memanipulasi argumen baris perintah.

orion
sumber
1

Untuk sedikit penyesuaian:

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

Anda dapat menghapus -noexecutebendera setelah Anda melihat cara kerjanya.

Jika berhasil, Anda dapat menjatuhkan shseluruhnya dan melakukan ini sebagai gantinya:

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

Atau lebih cepat:

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

Apa pun caranya mudah dan akan melakukannya.

mikeserv
sumber