xargs: birden fazla komutta aynı argümanı kullanma


17

Bölümlerden biri df -h[veya neredeyse] alanı yetersiz olduğunda çıktısını problayabilen ve uyarabilen bir astar yazmaya çalışıyorum . Beni şimdi kıçından tekmeleyen xargs kullanan kısmı ...

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

İkinci {} şovunu "95" nasıl da yapabilirim?

Yanıtlar:


23

Bu komutun bir &&parçası değil xargs, tamamen ayrı bir çağrı. Bence açıkça bir alt kabuk yürütmek isteyeceksiniz:

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

Ayrıca kabuk _percentyerine {}ekstra tırnak baş ağrısı önlemek için kullanıyorum unutmayın . Bu bir kabuk değişkeni değil; hala sadece bir xargs değiştirme dizesi.


3

Daha okunabilir olan alternatif bir yol, diğer tüm komutlarınızı içeren ayrı bir işlev tanımlamak ve daha sonra bu işlevi xargsbir alt kabukta çağırmaktır .

Dolayısıyla, örneğin:

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"'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.