2016-09-29 8 views
2

Обычно я использую bash, но в этом случае я должен использовать tcsh. К моему удивлению, я не могу использовать переменную, содержащую статус выхода в качестве аргумента в exit:Не удается установить статус выхода tcsh с помощью переменной

[bash] tcsh 
[tcsh] set status=2 
[tcsh] echo $status 
2 
[tcsh] exit $status 
exit 
[bash] echo $? 
0 

Буквальное аргумент exit работает, как ожидалось:

[bash] tcsh 
[tcsh] exit 2 
exit 
[bash] echo $? 
2 

Что на земле происходит здесь ?

ответ

3

$status - это встроенная переменная оболочки C, содержащая статус выхода предыдущей команды. Попробуйте вторя $status дважды, и вы можете видеть, что Tcsh изменяет значение $status до 0, статус выхода первой echo команды:

[bash] tcsh 
[tcsh] set status=2 
[tcsh] echo $status 
2 
[tcsh] echo $status 
0 

Решение состоит в том, чтобы просто использовать другое имя переменной, которая не является C оболочки встроенная переменная:

[bash] tcsh 
[tcsh] set result=2 
[tcsh] echo $result 
2 
[tcsh] exit $result 
exit 
[bash] echo $? 
2