Как сохранить вывод команды git в переменной?

Я хочу сохранить вывод команды git (например, git status) внутри переменной в оболочке script. Когда я говорю вывод, я говорю о тексте, возвращаемом в терминале при выполнении команды, например: при выполнении git статуса вне моего репо:

fatal: Not a git repository (or any of the parent directories): .git

Я пробовал это:

var=$(git status)

Но "var" ничего не хранил.

Ответ 1

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

var=$(git status 2>&1)

то есть. перенаправить stderr в stdout и затем захватить вывод.

В противном случае, если сообщения об ошибках записываются на stderr, и ваша команда: var=$(git status) записывает только stdout.

Ответ 2

Это сообщение выводится на стандартную ошибку, по умолчанию $(cmd) только фиксирует стандартный вывод. Вы можете исправить, перенаправив стандартную ошибку в стандартную версию - см. Один из других ответов. Однако вместо этого вы можете использовать код выхода

  • 128 для этого случая
  • 0, если ошибок нет.

Я бы очень рекомендовал это, пытаясь обнаружить строку "фатальный: не репозиторий git..."

foo=$(git status)
fatal: Not a git repository (or any of the parent directories): .git
echo $?
128

Кроме того, существует git status --porcelain и --short, которые полезны для сценариев.

Если вы используете Linux/OS X и т.д., то полная информация находится на man git -status