Сохранение $?вывод с использованием нескольких операторов канала с использованием файловых дескрипторов - PullRequest
0 голосов
/ 18 апреля 2019

В кли

Я бегу

без ошибок

cmd=$(uname -a) | awk '{print $1}'
echo $?

0

с ошибкой

   cmd=$(uname + -a) | awk '{print $1}'
    echo $?

0

Из-за использования | я не могу сохранить код ошибки возврата из команды 1, я использую fd в качестве возможного решения, нобезрезультатно

возможное решение

cmd=$(uname + -a) 3>&2| awk '{print $1}' 2>&3

-bash: 3: Bad file descriptoruname: extra operand ‘+’

решено

cmd=$(uname -a | awk '{print $1}' 2>&1)

echo $?

значение не равно нулю.

Спасибо всем

1 Ответ

1 голос
/ 18 апреля 2019

Я подозреваю, что это все, что вам действительно нужно:

cmd=$(uname -a | awk '{print $1; f=1} END{exit !f}')
echo "$?"

Это завершится со статусом 0, если uname выдаст какой-либо вывод и awk успешно прочитает / напечатает его, в противном случае - 1.

Посмотрите:

$ cmd=$(uname -a | awk '{print $1; f=1} END{exit !f}')
$ echo "$?"
0

$ cmd=$(uname + -a | awk '{print $1; f=1} END{exit !f}')
uname: extra operand ‘+’
Try 'uname --help' for more information.
$ echo "$?"
1
...