Я настраиваю скрипт оболочки с меню и подменю, параметрами и т. Д. Но в каждом меню / подменю / и т. Д. Мне нужен выбор «Вернуться в главное меню».
Я уже настроил меню, и оно работает нормально, но мне нужен способ, чтобы просто перезапустить скрипт с нуля, сбросить все переменные и т. Д. И т. Д.
Или способ выйти из текущего скрипта и запустить его снова.
Я пытался сделать это:
ScriptLoc=$(readlink -f "$0")
./ScriptLoc
Но это запускает «новый» скрипт внутри «старого» скрипта, поэтому, когда я выхожу из «нового» скрипта, он возвращается к «старому» скрипту (если это имеет смысл). Это сценарий внутри сценария.
Кто-нибудь получил идею, как его полностью перезапустить?
command-line
scripts
restart
Moonbloom
источник
источник
$ScriptLoc
или иначе:./ScriptLoc
ищет скрипт с таким именем в текущем каталоге.Ответы:
Да делай
exec
Баш встроенной команды заменяет текущую программу с новым.источник
Вы можете использовать что-то вроде этого:
$(basename $0)
создаст новый экземпляр текущего скрипта иexit
выйдет из текущего экземпляра скрипта.Вот тестовый скрипт, который выделяет вышеуказанный метод:
Если вы не используете
export count=0
(что делаетcount
переменную окружения) и используете толькоcount=0
(что делаетcont
переменную локального сценария), то сценарий никогда не остановится.источник
&& exit
выйдет, только если скрипт завершится успешно. Так, если, например, скрипт не является исполняемым или имеет синтаксическую ошибку, это, скорее всего, будет вращаться.Надежно получить сценарий, который в данный момент выполняется, сложнее, чем вы думаете. См. Http://mywiki.wooledge.org/BashFAQ/028 .
Вместо этого вы можете сделать что-то вроде этого:
По сути, вы запускаете функцию main_menu в подоболочке, поэтому, если вы выходите из main_menu или из любого подменю, вы выходите из подоболочки, а не из основной оболочки. статус выхода 255 выбран здесь, чтобы означать «идти снова». Любое другое состояние выхода выйдет из бесконечного цикла.
источник