Як переключити / змінити користувальницький ідентифікатор у скрипті bash для виконання команд у тому ж сценарії?


12

Чи є спосіб переключити ідентифікацію користувача в скрипті (виконується як 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
Клаус

Відповіді:


25

Ні. Але ви можете використовувати sudoдля запуску оболонки і використовувати heredoc, щоб подавати їй команди.

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

Це, безумовно, робить роботу зі з’єднання речей в одному сценарії, а також може використовувати підстановку команд, якщо все обернуто закритою дужкою на один рядок після EOF
a1an

Ця відповідь є кращою за всі відповіді на запитання, які цей дублює .
Дан Даскалеску

1
Мені майже цікаво, якби я це робив, я б не використовував EOF, а замість цього змінив ім’я гередок на SUDO. Таким чином, я б пам'ятав, що я працюю як супер користувач всередині містить код.
Джо Хеймінг

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