2015-01-28 3 views
11

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

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

Я попытался это:

var=$(git status) 

Но «вар» ничего не хранил.

+1

Пример вывода, вероятно, пошел в STDERR, и 'var' будет содержать то, что был отправлен в STDOUT. Вы можете использовать '2> & 1' для перенаправления первого на последний. – Biffen

+0

Спасибо, результат ведь пошел в STDERR. – aliasav

ответ

20

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

var=$(git status 2>&1) 

т.е. перенаправить поток ошибок на стандартный вывод, а затем захватить выход.

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

+2

Спасибо большое! Не могли бы вы предоставить какие-либо ссылки на документы, которые я мог бы изучить. (Я бы дал вам голосование, но мое низкое репо не разрешит его.) – aliasav

+1

[Отметьте это хорошее руководство по перенаправлению] (http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO- 3.html) – anubhava

1

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

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

Я настоятельно рекомендую это более пытаться обнаружить строку «фатальным: Не вместилище мерзавец ...»

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

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

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

+0

Спасибо, этот метод, использующий коды выхода, мне точно нужен. – aliasav

Смежные вопросы