Правильно, что сценарии с исходными текстами и исполняемыми сценариями используют return
vs. exit
, чтобы сохранить тот же сеанс открытым, как отмечали другие.
Вот связанный совет, если вы когда-нибудь захотите сценария который должен держать сеанс открытым независимо от того, был ли он получен.
Следующий пример может быть запущен прямо как foo.sh
или получен как . foo.sh
/ source foo.sh
. В любом случае он будет держать сессию открытой после «выхода». Строка $@
передается так, чтобы функция имела доступ к аргументам внешнего скрипта.
#!/bin/sh
foo(){
read -p "Would you like to XYZ? (Y/N): " response;
[ $response != 'y' ] && return 1;
echo "XYZ complete (args $@).";
return 0;
echo "This line will never execute.";
}
foo "$@";
Результат терминала:
$ foo.sh $ Хотели бы вы к XYZ? (Y / N): n $. foo.sh $ Хотели бы вы XYZ? (Y / N): n $ | (окно терминала остается открытым и принимает дополнительный вход)
blockquote>Это может быть полезно для быстрого тестирования изменений сценария в одном терминале, сохраняя при этом кучу кода скрапа под основным
exit
/return
пока вы работаете. Это также может сделать код более переносимым в некотором смысле (если у вас есть множество сценариев, которые могут или не могут быть вызваны по-разному), хотя это гораздо менее неудобно использоватьreturn
иexit
там, где это необходимо.