xargs: menggunakan argumen yang sama dalam banyak perintah

17

Sedang mencoba untuk menulis satu-liner yang dapat menyelidiki output df -hdan mengingatkan ketika salah satu partisi keluar [atau hampir] ruang. Itu bagian menggunakan xargs yang menendang saya di pantat sekarang ...

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

Bagaimana saya bisa membuat {} kedua menunjukkan "95" juga?

nemesisfixx
sumber

Jawaban:

23

Itu &&bukan bagian dari xargsperintah, itu doa yang benar-benar terpisah. Saya pikir Anda ingin secara eksplisit menjalankan subkulit:

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

Perhatikan juga saya menggunakan _percentbukannya {}menghindari sakit kepala mengutip ekstra dengan shell. Ini bukan variabel shell; masih hanya string pengganti xargs.

ckhan
sumber
3

Cara alternatif, yang lebih mudah dibaca, adalah dengan mendefinisikan fungsi terpisah yang berisi semua perintah Anda yang lain dan kemudian memanggil fungsi itu dengan xargsdi dalam sub-shell.

Karenanya, misalnya:

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
sumber