xargs: usando lo stesso argomento in più comandi


17

Sto cercando di scrivere un one-liner in grado di sondare l'output df -he avvisare quando una delle partizioni è esaurita [o quasi] di spazio. È la parte che usa xargs che mi dà un calcio nel culo ora ...

echo 95 | xargs -n1 -I{} [ {} -ge 95 ] && echo "No Space on disk {}% full -- remove old backups please"

Come posso fare in modo che anche il secondo {} mostri "95"?

Risposte:


23

Questo &&non fa parte del xargscomando, è un'invocazione completamente separata. Penso che vorrai eseguire esplicitamente una subshell:

echo 95 | xargs -n1 -I_percent -- sh -c '[ _percent -ge 95 ] && echo "No Space on disk _percent% full -- remove old backups please"'

Nota anche che sto usando _percentinvece di {}evitare ulteriori citazioni di mal di testa con la shell. Non è una variabile di shell; ancora solo una stringa di sostituzione xargs.


3

Un modo alternativo, che è più leggibile, è definire una funzione separata che contenga tutti gli altri comandi e quindi chiamare quella funzione con xargsuna sotto-shell.

Quindi, ad esempio:

myfunc(){
  [ "$1" -ge 95 ] && echo "No Space on disk $1% full -- remove old backups please"
  echo "Another command echoing $1"
}

export -f myfunc

echo 95 | xargs -n1 -I_percent -- sh -c 'myfunc "_percent"'
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.