Как я могу выполнить серию команд в подоболочке bash как другой пользователь, использующий sudo

Я пишу сценарий bash, который должен выполнять несколько команд sudo. Я могу сделать это:

( whoami ; whoami )

, но я не могу сделать это:

sudo ( whoami ; whoami )

Как мне решить эту проблему?

38
задан Community 6 March 2012 в 18:42
поделиться

4 ответа

Запустить оболочку внутри sudo : sudo bash -c 'whoami; whoami '

Вы можете использовать любой символ, кроме самого ' , внутри одинарных кавычек. Если вы действительно хотите, чтобы в этой команде была одинарная кавычка, используйте '\' ' (технически это: конечный литерал в одинарных кавычках, литерал ' , начальный литерал в одинарных кавычках ; но по сути это способ вставить одинарную кавычку в одинарную буквальную строку).

59
ответ дан 27 November 2019 в 03:09
поделиться

Вы можете передавать команды как стандартный ввод в sudo'ed bash с помощью here document:

sudo bash <<"EOF"
whoami
id
EOF

Таким образом, нет необходимости возиться с правильным цитированием, особенно если у вас несколько уровней, например:

sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF

Produces:

root
root /root
apache
apache /usr/share/httpd

(Обратите внимание, что вы не можете отступать внутренний терминатор - он должен быть один на своей строке. Если вы хотите использовать отступ в данном документе, вы можете использовать <<- вместо <<, но тогда вы должны делать отступ с помощью табуляции, а не пробелов)

.
55
ответ дан 27 November 2019 в 03:09
поделиться

Скобки означают, что команда выполняется в новом bash.Он выполняет команду с интервалом в точку с запятой.Просто используйте код ниже вместо этого.

(sudo whoami;sudo whoami)

BYW: пробел не нужен при использовании '()'.

-2
ответ дан 27 November 2019 в 03:09
поделиться

sudo запрашивает ваш пароль только в первый раз. По умолчанию полученный пароль действителен в течение 5 минут. Вы можете изменить это значение, как указано в this . Так что просто беспокойтесь о приглашении passwd в начале вашего скрипта, то вы можете использовать sudo . изменение значения по умолчанию: user_name timestamp_timeout на -1 может быть дырой в безопасности вашей системы.

-3
ответ дан 27 November 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: