Я столкнулся с чем-то интересным.Как говорится в заголовке, я пытаюсь перенаправить stderr в стандартный вывод и подавить / выбросить стандартный вывод. Перед тем, как пометить это сообщение как дубликат ( Оболочка: перенаправить стандартный вывод в / dev / null и stderr в стандартный вывод , или Как передать поток stderr, а не стандартный вывод? или Перенаправление ввода-вывода - обмен stdout и stderr ), пожалуйста, дайте мне шанс.
Итак, я хочу что-то вроде этого:
#!/bin/bash
temp_func () {
GLOBALVAR="$($1 "$2" 2>&1 >/dev/null)"
}
temp_func "echo" "hello world"
echo "should be empty: $GLOBALVAR"
temp_func "ecsdfho" "hello world"
echo "should show err: $GLOBALVAR"
Выше работает, как и ожидалось.Очень круто.
Если я теперь вместо этого сделаю:
PUSH_RESULT="$(git push "$REMOTE" "$NEW_TAG" 2>&1 >/dev/null)"
$PUSH_RESULT
заканчивается заполнением с ошибкой при возникновении ошибки (что здорово), но также заканчивается выводом gitпосле успешного толчка.Почему!?
ПРИМЕЧАНИЕ. Мне удалось обойти эту проблему, выполнив что-то вроде:
PUSH_RESULT="$(git push -q "$REMOTE" "$NEW_TAG" 2>&1)"
, но мне любопытно, почему первоначальный метод не работает.
Спасибо.