2015-09-08 4 views
2

В настоящее время я создаю скрипт, который выполняет некоторые манипуляции с файлами для нашей программной среды. Теперь, когда мы перешли в Git, есть некоторые функции, которые необходимо настроить этим скриптам (т. Е. Игнорировать локальные изменения в некоторых файлах).c скриптом для проверки наличия Git в системе

Итак, я думал об этом сценарии оболочки C, чтобы проверить, установлен ли Git в системе до того, как некоторые действия Git будут обратно совместимы с другими системами без установки Git.

Я думал об использовании which или whereis, но я не могу его интегрировать с оператором C shell if().

+1

Должен ли быть сценарий, специфичный для 'csh'? Если да, то почему? – Jubobs

+0

да, потому что это оболочка, которая была выбрана тем, кто запустил старые серверы ... честно говоря, я не могу дать достаточную причину. мы просто застряли в csh. извините –

+1

Хорошо, справедливо. Ответ Torek решает вашу проблему? Если да, пожалуйста, подтвердите/примите это. В противном случае оставьте некоторые отзывы ниже ответа torek. – Jubobs

ответ

2

Если вы действительно нужно CSH, это работает:

if (-x `which git`) then 
    ... what to do if it can be run ... 
else 
    ... what to do if it cannot 
endif 

В -x тест проверяет, является ли файл исполняемым данный путь, и обратные кавычки запустить which, чтобы найти путь (или печать git: command not found, который выиграл» t исполняемый файл).

Как Carpetsmoker noted in comments, если вы используете Tcsh (или есть CSH, что это на самом деле просто Tcsh, как это происходит на современных компьютерах Mac и FreeBSD, например), вы можете просто использовать:

if (-X git) then ... 

Вы тем не менее, намного лучше с разумной оболочкой.

+0

Вы можете просто использовать '-X' (capital' x'), не нужно для 'which':' if (-X git) echo "git found" ' – Carpetsmoker

+0

Интересно ... согласно документации, верхний регистр X является новым в tcsh (vs plain csh). На странице руководства также есть оговорка, а не путь: «-X/bin/ls» обычно является ложным, но это легко контролировать. – torek

+0

Да, это 'tcsh' думаю, но AFAIK количество систем, которые имеют' csh', а это * not * 'tcsh', очень мало от несуществующего ... – Carpetsmoker

0

Я не обычный csh пользователь, но man csh говорит, что нужно проверить значение status переменных после выполнения команды, как это имеет возвращаемое значение последней команды:

status The status returned by the last command. If it terminated 
     abnormally, then 0200 is added to the status. Built-in 
     commands that fail return exit status 1, all other 
     built-in commands set status to 0. 

Например:

$ csh 
% which git 
/usr/bin/git 
% echo $status 
0 
% which non-existing-command 
non-existing-command: Command not found. 
% echo $status 
1 
% 

Зная, что это легко написать if условие:

#!/usr/bin/env csh 

which git > /dev/null 
if ($status == 0) then 
    echo git found 
else 
    echo git not found. Exiting. 
    exit 1 
endif 
+0

Это немного окольный путь. Вам не нужно использовать значение 'status'. – Jubobs

+0

Как я уже сказал, я не использую 'csh'. Что лучше? –

+1

Мое замечание не касалось 'csh'. Вы можете использовать 'git ...' в операторе if напрямую. См. Мой ответ. – Jubobs

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

  • Нет связанных вопросов^_^