Есть ли способ, как я могу запустить две команды Db2 из командной строки? (Они будут вызваны из exec
команды PHP .)
db2 connect to ttt
(обратите внимание, что нам нужно, чтобы соединение работало для второй командыdb2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'
Я попробовал это:
sudo -su db2inst1 db2 connect to ttt; db2 UPDATE CONTACT SET EMAIL_ADDRESS = 'mytestaccount@gmail.com'
Первая команда завершается правильно, но вторая завершается неудачно с сообщением об ошибке SQL1024N A database connection does not exist. SQLSTATE=08003
Обратите внимание, что мне нужно запустить это как пользователь php. Команда sudo -u db2inst1 id
как пользователь php дает мне правильный вывод.
Ответы:
sudo может запускать несколько команд через оболочку, например:
Ваша команда будет что-то вроде:
Если ваша версия sudo не работает с точками с запятой с -s (очевидно, это не работает, если скомпилированы с определенными параметрами), вы можете использовать
вместо этого, который в основном делает то же самое, но заставляет вас явно назвать оболочку.
источник
sudo -s -- '/usr/bin/whoami; /usr/bin/whoami' /bin/bash: /usr/bin/whoami; /usr/bin/whoami: No such file or directory
sudo -- sh -c 'whoami; whoami;
как обходной путь, когда "sudo -s" не работает. Я также обновил ответ.--
указывает конец параметров дляsudo
, поэтому все остальное является частью команды; без этого аргументы вроде-c
могут быть интерпретированы как аргументsudo
. Это работает для большинства (но не всех) программ командной строки. В другом (неsudo
) примере, удалить файл с именем, который-f
вы не можете просто запуститьrm -f
, верно ?! Но вы можете запустить,rm -- -f
чтобы удалить файл с именем-f
.Для вашей команды вы также можете обратиться к следующему примеру:
sudo sh -c 'whoami; whoami'
источник
Я обычно делаю:
источник
Если вы хотите обрабатывать кавычки:
источник
sudo
- вы всегда должны обмануть его в выполнении оболочки , которая может принимать несколько команд для запуска в качестве параметров»Альтернативное использование,
eval
поэтому избегаем использования подоболочки:Примечание: другие ответы, использующие
sudo -s
сбой, потому что кавычки передаются в bash и запускаются как одна команда, поэтому нужно удалять кавычки с помощью eval.eval
лучше объяснить это так ответЦитировать внутри команд тоже проще:
И если команды должны прекратить работу, если одна из них не работает, используйте двойные амперсанды вместо точек с запятой:
источник
-s
Вариант не работает для меня, и-i
сделал.Вот пример того, как я могу обновить размер журнала из моего bash:
источник
На терминале введите:
Затем напишите столько команд, сколько хотите. Введите,
exit
когда вы сделали.Если вам нужно его автоматизировать, создайте
script.sh
файл и запустите его:источник
В немного связанной теме я хотел сделать то же самое sudo с несколькими командами через SSH, но ничего из вышеперечисленного не сработало.
Например, в Ubuntu,
Хитрость, обнаруженная здесь, заключается в двойном кавычке команды.
Другие варианты, которые также работают:
В принципе, двойные кавычки необходимы, потому что я думаю, что клиентская оболочка, в которой запускается SSH, удаляет самый внешний набор кавычек. Смешивайте и сопоставляйте кавычки с вашими потребностями (например, переменные должны быть переданы). Однако YMMV с кавычками, особенно если удаленные команды сложны. В этом случае такой инструмент, как Ansible, сделает лучший выбор.
источник
Если вы знаете пароль пользователя root, вы можете попробовать
источник
sudo su -c "<command1> ; <command2>"
.Приведенные выше ответы не позволят вам цитировать внутри кавычек. Это решение будет:
И команда umask, и команда mkdir работают с пользователем «nobody».
источник