Если в моем сценарии автоматизации мне нужно сделать что-то вроде 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 (или любую другую оболочку), либо выйти из него в моем скрипте?
Если вы действительно посмотрите на этот скрипт, вы увидите, что в последнюю очередь он вызывает:
exec zsh -l
Непосредственно перед этим вы увидите, что он проверяет, RUNZSH
переменная установлена в no
. Если да, то он просто выйдет, не заходя в оболочку.
Итак, все, что вам нужно сделать, это передать переменную среды RUNZSH=no
к команде.
Комментарии в верхней части скрипта содержат другие переменные, которые вы можете установить, и параметры командной строки, которые вы можете использовать.