Risposte:
Scrivi {}
due volte al tuo comando. Quanto segue funzionerebbe:
$ echo test | xargs -I {} echo {} {}
test test
Il tuo problema è come sono nidificati i comandi . Vediamo questo:
echo test | xargs -I {} echo {} && echo {}
bash verrà eseguito echo test | xargs -I {} echo {}
. Se funziona correttamente, echo {}
viene eseguito. Per cambiare l'annidamento, potresti fare qualcosa del genere:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Tuttavia, potresti avere problemi perché l'approccio potrebbe essere incline all'iniezione di codice. Quando "test" viene sostituito con il codice shell, viene eseguito. Pertanto, dovresti probabilmente passare l'input alla shell nidificata con argomenti.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
. È meglio farexargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Un'altra opzione è usare -i
flag, che è lo stesso di -I{}
(implica che la sostituzione è data con {}
):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
è stato aggiunto al manuale man xargs
.
Per me funziona solo il minuscolo. Avevo centinaia di immagini in una directory e volevo inserire le loro fonti in un elenco. L' -I
opzione maiuscola i non ha funzionato per me. Solo la minuscola. Probabilmente a causa delle differenze di versione. Tutte queste immagini avevano nomi come Daniel_(somenumber).jpg
.
Questa sintassi ha funzionato:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
Ritorna:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...