Тестирование успеха команды с участием труб - PullRequest
1 голос
/ 10 января 2020

Как лучше всего проверить, что команды df и awk были успешными в следующей команде? Использование Solaris.

df -h /myloc* | awk '{ if ( $5 > 80 ) print $6}' > somelog

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Вам следует использовать параметр pipefail (он также поддерживается в ksh, оболочке по умолчанию в Solaris):

$ if false | true; then echo ok; else echo failed; fi
ok
$ set -o pipefail
$ if false | true; then echo ok; else echo failed; fi
failed

Вы можете локализовать этот параметр в подоболочке:

if (set -o pipefail; false | true); then echo ok; else echo failed; fi

(замените false и true соответствующими командами)

0 голосов
/ 15 января 2020

Простой способ - разделить их, чтобы вы могли сохранить первый вывод и проверить соединение двух состояний выхода:

if OUT1=$(df -h /myloc*) && echo ${OUT1} | awk '{ if ( $5 > 80 ) print $6}' > somelog; then
  echo "success"
else 
  echo "failure"
fi
...