Come eseguire ripetutamente un comando con diversi argomenti?


11

Sono su Ubuntu. Ho copiato alcuni argomenti (separati da newline) e posso usare xsel per stamparli in questo modo

$ xsel
arg1
arg2
arg3
arg4
...

Ora, voglio usare ciascuno di questi argomenti per un altro comando ed eseguire quel comando tutte le volte che ci sono argomenti.

Quindi ci ho provato

$ xsel | mycommand "constantArgument" $1

Tuttavia, questo è stato eseguito mycommandsolo per il primo argomento. Come posso eseguirlo per ogni argomento?


Modificato la domanda per riflettere il fatto che il mio comando contiene più di un argomento.
Wes,

Risposte:


12

Puoi semplicemente usare xargs

xsel | xargs -n1 echo mycommand 

-n1 significa un arg per mycommand, ma è solo dry run, mostrerà cosa verrà eseguito, per eseguirlo rimuoverlo echo

Per argomento costante

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

E se "mycommand" prevede più di un argomento dal quale xsel contiene solo un argomento?
Wes,

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

xsel | xargs -n2 echo mycommanddue arg per comando
Rahul Patil,

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

O qualcosa di simile. Puoi anche usare xargs, che è un comando molto potente per manipolare gli argomenti della riga di comando.


1

Per un po 'di personalizzazione:

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

Puoi rimuovere la -noexecutebandiera dopo aver visto come funziona.

Se funziona per te, puoi rilasciarlo shcompletamente e farlo invece:

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

O più veloce:

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

In entrambi i casi è facile e lo farà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.