как запустить две команды в 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', который в основном делает то же самое, но название явно оболочку.
альтернативное использование 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-выполняются с пользователем "никто".