Как переключить / изменить идентификатор пользователя в скрипте 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...
A1An
источник

Ответы:

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