xargs: Verwenden des gleichen Arguments in mehreren Befehlen

17

Ich versuche, einen Einzeiler zu schreiben, der die Ausgabe von df -hund Warnung prüfen kann, wenn eine der Partitionen nicht genügend Platz hat. Es ist der Teil mit Xargs, der mich jetzt in den Arsch tritt ...

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

Wie kann ich auch die zweite {} Show "95" machen?

nemesisfixx
quelle

Antworten:

23

Das &&ist nicht Teil des xargsBefehls, sondern ein völlig separater Aufruf. Ich denke, Sie möchten explizit eine Subshell ausführen:

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

Beachten Sie auch, dass ich _percentanstelle von {}Kopfschmerzen mit der Shell vermeide, zusätzliche Anführungszeichen zu setzen. Es ist keine Shell-Variable. immer noch nur eine xargs ersatzzeichenfolge.

ckhan
quelle
3

Eine Alternative, die besser lesbar ist, besteht darin, eine separate Funktion zu definieren, die alle Ihre anderen Befehle enthält, und diese Funktion dann xargsin einer Sub-Shell aufzurufen .

Daher zum Beispiel:

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"'
shivams
quelle