Bash print stderr only, not stdout

Я хочу завязать файл и печатать stderr (сообщение об ошибке), но не печатайте stdout (говоря, что файл в порядке).

php -l "foo/bar.php"
  • Если ошибок нет, он выводит сообщение "Нет ошибок" на стандартный вывод.
  • Если есть ошибки, он печатает подробное сообщение для stderr. Я хочу только этот.

Я полагаю, что это будет какая-то магия с >&, но я никогда не понимал, как это работает.

Я хочу использовать все stdout, сохранять stderr.

(Извините, если это дуликат, но я не нашел в этом никаких вопросов)

Ответы

Ответ 1

Просто отправьте stdout в null:

cmd > /dev/null

Это сохраняет stderr, но подавляет stdout.

Ответ 2

Вы можете использовать:

php -l "foo/bar.php" 2>&1 > /dev/null

то есть. перенаправить stderr в stdout и stdout на /dev/null, чтобы получить только stderr на вашем терминале.

Ответ 3

Если ошибок нет, он выводит сообщение "Нет ошибок" на стандартный вывод. Если есть ошибки, он печатает подробное сообщение для stderr. Я хочу только этот.

Это будет печатать сообщение об ошибке, если оно отправлено, или No error., если оно пустое.

ERROR=$(exec php -l "foo/bar.php" 2>&1 >/dev/null)
[[ -z $ERROR ]] && ERROR='No error.'
echo "$ERROR"