Как переключить / изменить идентификатор пользователя в скрипте bash для выполнения команд в том же скрипте?


14

Есть ли способ переключить идентификацию пользователя в скрипте (выполняется как root как часть процесса установки), чтобы выполнить некоторые команды без вызова внешнего скрипта, а затем вернуться rootк выполнению других команд?

Вроде, как бы, что-то вроде:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...


Вы должны взглянуть на этот ответ stackoverflow.com/a/17758312/1243547
Клаус

Ответы:


28

Нет. Но вы можете использовать sudoдля запуска оболочки и использовать heredoc для подачи команд.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami

Это, безусловно, помогает сохранить все вместе в одном и том же сценарии, а также может использовать подстановку команд, если все обернуто закрывающей скобкой через одну строку после EOF
a1an

Этот ответ лучше, чем все ответы в вопросе, который этот дублирует .
Дан Даскалеску

1
Мне почти интересно, если бы я сделал это, я бы не использовал EOF, а вместо этого изменил бы название heredoc на SUDO. Таким образом, я бы запомнил, что я работаю как супер-пользователь внутри содержащего кода.
Джо Хейминг

По некоторым причинам, кажется, что установка переменных в команде heredoc, переменные не установлены. Если я попытаюсь, BLA="something"например:, echo "In: $BLA"кажется, что BLA пусто
Efren
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.