Как запустить две команды в sudo?
Есть ли способ, которым я могу запустить две команды db2 из командной строки? (он будет вызван из команды php exec)
первая команда заканчивается правильно, а вторая SQL1024N A database connection does not exist. SQLSTATE=08003
Примечание
Мне нужно запустить это как php-пользователь. Команда sudo -u db2inst1 id
как пользователь php дает мне правильный вывод.
Ответы
Ответ 1
sudo может запускать несколько команд через оболочку, например:
$ sudo -s -- 'whoami; whoami'
root
root
Ваша команда будет выглядеть примерно так:
sudo -u db2inst1 -s -- "db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = '[email protected]'"
Если ваша версия sudo не работает с точкой с запятой с -s (видимо, она не скомпилирована с определенными параметрами), вы можете использовать
sudo -- sh -c 'whoami; whoami'
вместо этого, что в основном делает то же самое, но заставляет вас явно называть оболочку.
Ответ 2
Для вашей команды вы также можете обратиться к следующему примеру:
sudo sh -c "whoami; whoami"
Ответ 3
Я обычно делаю:
sudo bash -c 'whoami; whoami'
Ответ 4
Если вы хотите обрабатывать кавычки:
sudo -s -- <<EOF
id
pwd
echo "Done."
EOF
Ответ 5
Параметр -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;'
Ответ 6
Альтернатива с использованием eval
, поэтому избегайте использования подоболочки:
sudo -s eval 'whoami; whoami'
Примечание. Другие ответы с использованием sudo -s
завершаются сбоем, потому что кавычки передаются на bash и запускаются как одна команда, поэтому необходимо стричь кавычки с помощью eval. eval
лучше объяснить это ответ SO
Цитата в командах проще:
$ sudo -s eval 'whoami; whoami; echo "end;"'
root
root
end;
И если команды должны перестать работать, если один из них не использует двойные амперсанды вместо полуколоней:
$ sudo -s eval 'whoami && whoamit && echo "end;"'
root
/bin/bash: whoamit: command not found
Ответ 7
Вышеуказанные ответы не позволят вам процитировать внутри кавычек. Это решение будет:
sudo -su nobody umask 0000 \; mkdir -p "$targetdir"
И команда umask, и команда mkdir запускаются с пользователем "nobody".
Ответ 8
На терминале введите:
$ sudo bash
Затем напишите столько команд, сколько хотите. Введите exit
, когда вы закончите.
Если вам необходимо автоматизировать его, создайте файл script.sh
и запустите его:
$ sudo ./script.sh