xargs: використання одного аргументу у кількох командах


17

Я намагаюся написати однолінійку, яка може досліджувати вихід df -hта попереджати, коли один із розділів не має [або майже] місця. Це частина, що використовує xargs, яка мене б'є в дупу ...

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

Як я можу зробити друге {} шоу "95" теж?

Відповіді:


23

Це &&не є частиною xargsкоманди, це абсолютно окреме виклик. Думаю, ви захочете явно виконати підзаголовок:

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

Зауважте також, що я використовую _percentзамість цього, {}щоб уникнути зайвих цитувань головного болю з оболонкою. Це не змінна оболонка; все ще просто рядок заміни xargs.


3

Альтернативний спосіб, який є більш читабельним, - це визначити окрему функцію, яка містить усі інші ваші команди, а потім викликати цю функцію за xargsдопомогою під-оболонки.

Звідси, наприклад:

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"'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.