Я хотел бы создать сценарий что:
Пример: test.sh
echo "test script"
sudo su
logout
Если я запускаю скрипт как это:
echo "test"
sudo su
whomai
Я получаю требуемый результат:
[wolfy@ubuntusrv ~ ]# ./test.sh
test
[root@ubuntusrv wolfy]# date
Fri 19 Jun 10:56:52 CEST 2015
[root@ubuntusrv wolfy]# echo bla
bla
[root@ubuntusrv wolfy]# exit
wolfy
[wolfy@ubuntusrv ~ ]#
Как Вы видите, сценарий выполняет мою команду эха и затем меня sudo su для укоренения, где я могу сделать то, что я должен сделать и после того, как я вышел из корневой сессии, сценарий выполняет последнее (whoami) команда.
Моя проблема состоит в том, что я не могу выйти из системы сам в конце этого сценария.
Мне нужен способ сделать это без полномочий пользователя root.
Кто-то может помочь мне?
Дополнительное объяснение:
Возможно, все, что Вы хотите сделать:
exec ./test.sh
Это заменяет Ваш текущий процесс оболочки сценарием, так, чтобы, когда это заканчивается, не было ничего для выполнения.
logout
в сценарии ни на что не влияет, с тех пор logout
только работы для оболочек входа в систему, и сценарии обычно не выполняются как оболочки входа в систему.
мне кажется, что Вы входите в систему через SSH (или что-то), работая как другой пользователь и сразу выходить из системы. В этом случае просто получите сценарий, так, чтобы команды были выполнены в Вашей текущей оболочке. Затем logout
будет работать.
Или, можно использовать exec
, но в этом случае, это не logout
, это вступает в силу - logout
, перестанет работать, и конец сценария просто заставляет его выходить. Различие без различия, я предполагаю.
Или, если Вы находите его громоздким для использования . ./script
, определяют функцию с фигурными скобками:
switchuser () {
echo "test script"
sudo su -
exit
}
Команды в фигурных скобках, выполненных в текущей оболочке и командах в круглых скобках, выполняются в подоболочке. Добавьте это к Вашему .bashrc
, тогда можно просто сделать:
switchuser
Как правило, выполнять команду как корень, sudo
достаточно.
#!/bin/bash
echo test
sudo whoami
Если Вы настаиваете на том, чтобы использовать su
, по любой причине можно использовать флаг-c:
#!/bin/bash
echo test
sudo su -c whoami
И вот результат, то же в обоих случаях:
$ ./test.sh
test
[sudo] password for xieerqi:
root
Если Вы хотите ввести корневую оболочку, использовать sudo -i
serg@ubuntu[/home/xieerqi]
$ sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi]
$
С su:
serg@ubuntu[/home/xieerqi]
$ sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi
Если Вы хотите к командам выполнения как другой пользователь, не только корень, можно использовать sudo -u username command
$ sudo -u testuser whoami
testuser
Та же идея с su
:
serg@ubuntu[/home/xieerqi]
$ sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi]
$ whoami
xieerqi