как запустить две команды в sudo?

есть ли способ как я могу запустить две команды DB2 из командной строки? (Они будут вызываться из PHP

8 ответов


sudo может запускать несколько команд через оболочку, например:

$ sudo -s -- 'whoami; whoami'
root
root

ваша команда будет что-то вроде:

sudo -u db2inst1 -s -- "db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'"

Если ваша версия sudo не работает с точками с запятой с -s (по-видимому, это не так, если она скомпилирована с определенными параметрами), вы можете использовать

sudo -- sh -c 'whoami; whoami'
, который в основном делает то же самое, но название явно оболочку.

для вашей команды, вы также можете обратиться к следующему примеру:

sudo sh -c "whoami; whoami"


Я обычно делаю:

sudo bash -c 'whoami; whoami'

Если вы хотите использовать кавычки:

sudo -s -- <<EOF
id
pwd
echo "Done."
EOF

альтернативное использование eval таким образом, избегая использования subshell:

sudo -s eval 'whoami; whoami'

Примечание: другие ответы с помощью sudo -s сбой, потому что кавычки передаются на bash и запускаются как одна команда, поэтому необходимо удалить кавычки с eval. eval лучше объяснить это так что ответ

цитирование внутри команд тоже проще:

$ sudo -s eval 'whoami; whoami; echo "end;"'
root
root
end;

и если команды должны прекратить работу, если один не использует двойные амперсанды вместо двоеточий:

$ sudo -s eval 'whoami && whoamit && echo "end;"'
root
/bin/bash: whoamit: command not found

на -s опция не работала для меня,-i сделал.

вот пример того, как я мог бы обновить размер журнала из моего bash:

sudo -u [user] -i -- sh -c 'db2 connect to [database name];db2 update db cfg for [database name] using logsecond 20;db2 update db cfg for [database name] using logprimary 20;'

на терминале, типа:

$ sudo bash

затем напишите столько команд, сколько хотите. Тип exit когда вы сделали.

Если вам нужно автоматизировать, создать script.sh файл и запустите его:

$ sudo ./script.sh

приведенные выше ответы не позволят вам цитировать внутри кавычек. Это решение будет:

sudo -su nobody umask 0000 \; mkdir -p "$targetdir"

и команда umask, и команда mkdir-выполняются с пользователем "никто".