Как сохранить вывод команды 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