Перенаправить stderr в stdout и stdout в / dev / null при запуске команды git - PullRequest
0 голосов
/ 24 мая 2019

Я столкнулся с чем-то интересным.Как говорится в заголовке, я пытаюсь перенаправить 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)"

, но мне любопытно, почему первоначальный метод не работает.

Спасибо.

1 Ответ

1 голос
/ 24 мая 2019

заканчивается успешным выводом git. Почему!? * * 1002

Потому что эти сообщения также пишутся в stderr. Это касается не только ошибок, но и сообщений о прогрессе и статусе, которые не считаются конечным продуктом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...