Я пишу bash script, которому нужно sudo несколько команд. Я могу это сделать:
( whoami ; whoami )
но я не могу этого сделать:
sudo ( whoami ; whoami )
Как это решить?
Я пишу bash script, которому нужно sudo несколько команд. Я могу это сделать:
( whoami ; whoami )
но я не могу этого сделать:
sudo ( whoami ; whoami )
Как это решить?
Запустите оболочку внутри sudo
:
sudo bash -c 'whoami; whoami'
В одиночных кавычках можно использовать любой символ, кроме '
. Если вы действительно хотите иметь одну цитату в этой команде, используйте '\''
(что технически является: конец символа одиночной кавычки, буквальный '
), начинайте одинарный кавычек, но эффективно это способ ввести один цитата в однокасканной литеральной строке).
Вы можете передать команды в качестве стандартного ввода в 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
(Обратите внимание, что вы не можете отступать от внутреннего терминатора - он должен быть один на своей линии. Если вы хотите использовать отступы в документе здесь, вы можете использовать <<-
вместо <<
, но тогда вы должен иметь отступ с вкладками, а не пробелами.)
например, попробуйте это, я протестировал его:
sudo bash -c "cd /;ls;ls|grep o"
В этом примере вы сначала изменяете каталог в корневом каталоге root, затем в корневой каталог корневого каталога, а только в каталогах с корневым каталогом, имеющим имя с буквой "o".
Но лучше всего писать script, которые делают все, что вам нужно, и дают код выхода для всех сложных действий. Затем вы можете sudo script вместо группы одиночных команд, как пример выше.
Скобки означают, что выполнить команду в новом bash.It выполнить команду с интервалом точки с запятой. Просто используйте код ниже.
(sudo whoami;sudo whoami)
BYW: при использовании '()' пробел не требуется.
sudo только запрашивает ваш пароль в первый раз. Ответ на passwd действителен в течение примерно 5 минут по умолчанию. Вы можете изменить это значение как this said.To просто беспокоиться о приглашении passwd в начале вашего script, тогда вы можете использовать sudo. изменение По умолчанию: имя_пользователя timestamp_timeout значение -1 может быть дырой в вашей системе.