2013-06-03 4 views
0

Я пытаюсь написать простой скрипт (для встроенной системы), который монтирует внешний файл из сети, а затем вызывает в командной строке exit (который выходит из терминала busybox и загружается система из вновь установленного корневого каталога). Проблема в том, что когда я вызываю exit из сценария оболочки, он выходит из сценария, а не внешнего терминала. Любые подсказки о том, как отправить команду exit вне сценария?вызов «exit» из сценария оболочки

Мой код выглядит примерно так:

#!/bin/bash 
mount /mnt/root 1.2.3.4:/path/to/external/files -o nolock 
exit # exits the script, not the outside filesystem! 
+0

ну, ваша родительская оболочка ('external shell') вызывает скрипт, который выполняется в дочернем процессе, подоболочка. Ни в коем случае нельзя вызывать то, что выполняется в родительской подоболочке. Но вместо вызова сценария как './Somescript.sh', вы можете назвать его как' ./somescript.sh && exit' – abasu

ответ

3

exit действительно выйти из текущей оболочки. Однако запуск сценария создает новый процесс, и это тот процесс, который выходит, а не оболочка, из которой вы вызвали скрипт.

Вы, вероятно, хотите просто подключим файл:

$ source myScript.sh 

Затем myScript.sh выполняется в текущей оболочке, а не порожденного процесса, и exit выйдет из текущей оболочки (и, следовательно, сам терминал).

1

Если вы хотите, что сценарий выходит внешний терминал называют это так:

source your_script 

или просто

. your_script 

где . является таким же, как команда source. Вы можете следить за this article, если вам нужна дополнительная информация.


Объяснение: source будет выполнять скрипт в текущей оболочки и, следовательно, выход будет интерпретироваться текущей оболочки - то, что будет закрывать псевдо окно терминала, если оболочка была первая оболочка (!) в дереве

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