Я хочу, чтобы когда пользователь linux выходит из сценария оболочки, он также выходит из оболочки bash. Это возможно?
Вместо обычного запуска скрипта, exec
вместо этого. Это заменит оболочку входа в систему, поэтому, когда сценарий завершится, пользователь выйдет из системы.
Завершите свой сценарий с помощью kill -HUP $PPID
$ PPID - это идентификатор родительского процесса.
В зависимости от того, что вы пытаетесь выполнить, вы можете использовать имя сценария вместо ракушки в / etc / passwd.
Последняя запись в / etc / passwd (все после последнего двоеточия) - это оболочка который запускается, когда пользователь входит в систему. Изменив это на имя вашего скрипта, когда скрипт завершится, по определению, оболочка тоже.
** Однако будьте очень осторожны при редактировании / etc / passwd, поскольку вы можете заблокировать доступ к своей машине. По-видимому, вы можете сделать это с помощью
usermod --shell <script name> <user name>
что было бы более безопасным способом внести это изменение.
Другой подход может заключаться в source
сценарий вместо того, чтобы вызывать его напрямую, exit
оператор в сценарии закроет оболочку пользователя:
$ cat exit_me.sh
#!/bin/bash
exit
и
$ source exit_me.sh
# or
$ . exit_me.sh
Подробнее о source
Вот.
с убийством?
$ kill -HUP `ps -ef |grep $USER|grep bash|awk {'print $2'}`
Изменить: как сказано в комментариях, он лучше работает с PPID
$ kill -HUP $PPID
Это можно сделать, если вы включите EXIT в конце вашего скрипта, который сообщает оболочке bash о завершении.