2013-11-30 3 views
2

Я begginner на оболочке, в настоящее время я написал небольшой скрипт, и я получил проблему без каких-либо ошибок:/тест оболочки всегда выйти

Этот код всегда выйти мой сценарий и я не понимаю, почему:

[[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!"; exit 0 

Когда $ PATH действителен, я ничего не получил и если путь неправильный, я получил сообщение об ошибке.

Если я удалить log_failure_msg "Binary file not found or not executable!"; работы сценария отлично -_-

Ho я могу решить эту проблему без если условия/фи?

Благодарим за помощь!

ответ

3

Проблема имеет приоритет, как объясняется phlogratos. Тем не менее, вы не можете использовать скобки, поскольку они порождают суб-оболочку, и вы будете покидать , что shell. Для этой конкретной проблемы существуют фигурные скобки. Они имеют почти ту же семантику, но они порождают задания в оболочке .

$ cat a.sh 
[[ -f file ]] || { echo error; exit 0; } 
echo "ok" 
$ touch file 
$ ./a.sh 
ok 
$ rm file 
$ ./a.sh 
error 
$ 
+0

Вы правы, исправили его в своем посте. – phlogratos

-1
[[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!"; exit 0 

эквивалентно

{ [[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!" } ; exit 0 

Что вам нужно

[[ -x $PATH ]] || { log_failure_msg "Binary file not found or not executable!"; exit 0 } 

Я предполагаю, что вы используете Баш. На странице состояния bash указано:

..., && and || have equal precedence, followed by ; and &, which have equal precedence. 
Смежные вопросы