Команда exit является встроенной командой, предназначенной для завершения процесса командной оболочки с кодом успешного завершения или кодом ошибки, если такой был передан в качестве аргумента. Данная команда крайне полезна в случае использования команды su для временной работы от лица другого пользователя — для возвращения в командную оболочку, открытую от лица текущего пользователя, достаточно просто выполнить ее.
Базовый синтаксис команды выглядит следующим образом:
$ exit [код-завершения]
Команда не принимает никаких параметров, но может принимать числовое значение кода завершения работы процесса командной оболочки. Как обычно, нулевой код обозначает успешное завершение работы процесса, ненулевой — указывает на ошибку. Данная команда нередко используется в сценариях командной оболочки, причем в случае отсутствия кода завершения работы возвращается код завершения работы последней команды.
Для работы от лица другого пользователя (чаще всего таким пользователем является root) достаточно использовать команду su, для возврата в командную оболочку, открытую от лица текущего пользователя — команду exit:
$ whoami
alexfc
$ su
Пароль:
# whoami
root
# exit
exit
$ whoami
alexfc
В данном случае команда su эквивалентна команде su root, то есть, предназначена для открытия командной оболочки от лица пользователя root. Команда whoami выводит имя текущего пользователя командной оболочки и используется для демонстрации смены пользователей.
В рамках сценария командной оболочки команда exit может использоваться для завершения его работы и возврата заданного кода завершения. А это простой пример такого сценария:
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo "Вы не имеете привилегий пользователя root"
exit 1
fi
ls /root
exit 0
В данном сценарии команда id -u используется для получения идентификатора текущего пользователя (идентификатор пользователя root при любых обстоятельствах равен 0). В том случае если идентификатор пользователя не равен 0 выводится соответствующее сообщение об ошибке (директива 1>&2 нужна для вывода сообщения с помощью стандартного потока ошибок), а работа сценария завершается с кодом 1. В противном случае выводится список файлов из домашней директории пользователя root (ls /root) и работа сценария завершается с кодом 0.
$ chmod +x testroot.sh
$ ./testroot.sh
Вы не имеете привилегий пользователя root
$ su
Пароль:
# ./testroot.sh
anaconda-ks.cfg