Intereting Posts

Линейная командная строка Linux, которая выйдет из строя, если будет произведен какой-либо стандарт

Есть ли простая утилита, которую я могу выводить на Linux, которая будет:

  • Верните код успеха, если на стандартном выходе нет (и / или стандартной ошибки).
  • Возврат кода сбоя, если вывод производится на стандартном выходе (и / или стандартной ошибке).

Чтобы обеспечить некоторый контекст, команда, которую я запускаю:

svn mergeinfo --show-revs eligible http://mysvnserver.example.com/SVF/repos/common/abc/branches/abc-1.7 http://mysvnserver.example.com/SVF/repos/common/abc/trunk 

Если на ветке есть какие-либо несвязанные записи, команда вернет список номеров ревизий при стандартном выпуске. В идеале, дополнительная команда, о которой я говорю, будет:

  • Обнаруживать записи по стандарту и возвращать условие ошибки в Linux.
  • Передайте стандартную версию, чтобы она появилась на терминале. Я бы предпочел не подавлять его.

Это grep который вы ищете:

 if svn ... 2>&1 | grep '^'; then echo "there was some output" else echo "there wasn't" fi 

Вы можете заменить grep '^' на grep . или grep '[^[:blank:]]' для проверки непустых или непустых строк (но это приведет к удалению пустых / пустых из выходных данных).

(обратите внимание, что поведение будет варьироваться в зависимости от реализации grep если вход содержит нетекстовые данные, такие как NUL-байты или слишком длинные или неконфигурированные строки (чего не было бы для svn )).

Я не знаю одной существующей команды … неудобно? Обертка? tee вывод в файл и выход на основе того, пустой ли файл?

Wrapper, предполагая, что вы все еще хотите видеть выход и сохраняете stdout и stderr в отдельности.

 #!/bin/bash TMPFILE=/tmp/allout.$$ TMPPIPE=/tmp/errout.$$ SAVERC=/tmp/saverc.$$ cleanup() { [ -p $TMPPIPE ] && rm $TMPPIPE [ -f $TMPFILE ] && rm $TMPFILE } trap cleanup EXIT # Set up output/display of std err [ -p $TMPPIPE ] || mkfifo $TMPPIPE cat $TMPPIPE | tee -a $TMPFILE1 >&2 & (eval "$*" 2>$TMPPIPE echo $? > $SAVERC ) | tee -a $TMPFILE [ -s $TMPFILE ] && exit 1 exit $(cat $SAVERC) 

Вы можете использовать wc для подсчета символов на выходе.

 $ [ $(ls 2>&1 | wc -c) = "0" ] $ echo $? 1 $ [ $(echo -n '' 2>&1 | wc -c) = "0" ] $ echo $? 0 

Требуется 2>&1 для перенаправления stderr на stdout.