Если в моем сценарии автоматизации мне нужно сделать что-то вроде install oh-my-zsh, у меня будет .sh скрипт следующего вида:
#!/bin/sh
runuser -l user -c 'sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"'
Это работает и устанавливает oh-my-zsh, как я ожидаю, но затем переводит сессию в оболочку zsh. Если я добавлю команду exit
в конец сценария, он ничего не делает.
Как я могу запретить переключение на zsh (или любой другой shell) или выход из него в моем скрипте?
Если вы на самом деле посмотрите на этот скрипт, вы увидите, что в последнюю очередь он вызывает:
exec zsh -l
Непосредственно перед этим вы увидите, что он проверяет наличие Переменная RUNZSH
установлена на нет
. Если это так, то он просто выйдет, не заходя в оболочку.
Итак, все, что вам нужно сделать, это передать команде переменную среды RUNZSH = no
.
Комментарии вверху скрипта содержат другие переменные, которые вы можете установить, и параметры командной строки, которые вы можете использовать.