Подтвердить что ты не робот

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

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

( whoami ; whoami )

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

sudo ( whoami ; whoami )

Как это решить?

4b9b3361

Ответ 1

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

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

Ответ 2

Вы можете передать команды в качестве стандартного ввода в sudo'ed bash с здесь:

sudo bash <<"EOF"
whoami
id
EOF

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

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

Выдает:

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

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

Ответ 3

например, попробуйте это, я протестировал его:

sudo bash -c "cd /;ls;ls|grep o"

В этом примере вы сначала изменяете каталог в корневом каталоге root, затем в корневой каталог корневого каталога, а только в каталогах с корневым каталогом, имеющим имя с буквой "o".

Но лучше всего писать script, которые делают все, что вам нужно, и дают код выхода для всех сложных действий. Затем вы можете sudo script вместо группы одиночных команд, как пример выше.

Ответ 4

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

(sudo whoami;sudo whoami)

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

Ответ 5

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