У меня есть эта строка, которую я выполняю из php
sudo -u db2inst1 -s -- "/opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 \"update EDU.contact set MOBILE_PHONE = '123'\""
отлично работает на версии Sudo1.7.2.
Теперь у меня есть новый сервер с SUSE Linux Enterprise Server 11 (x86_64)
. Не было sudo, поэтому я установил его из репозитория (версия Sudo1.6.9п17) Но знайте, что синтаксис выше не работает. Он выдаетbin/bash: /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 "update EDU.contact set MOBILE_PHONE = '123'": No such file or directory
Есть идеи, как это можно реализовать?
Если я запускаю /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 "update EDU.contact set MOBILE_PHONE = '123'"
под учетной записью db2inst1, все работает нормально.
решение1
Я действительно не совсем уверен, почему вы получаете эту ошибку. У меня есть система с sudo 1.8.3, и в документации четко сказано, что что-то вроде sudo -s "echo hi"
должно работать, но это не так.
Я всегда делал то же самое -s [command]
, но вручную.
sudo sh -c 'echo hi'
или в вашем случае
sudo -u db2inst1 sh -c "/opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin/db2 \"update EDU.contact set MOBILE_PHONE = '123'\""
Это более совместимо, поскольку этот -s
аргумент не всегда был актуален (а у меня, к сожалению, на работе есть несколько очень старых машин).
Редактировать:
То, что происходит в ошибке, которую вы получаете, заключается в том, что он ищет исполняемый файл, который буквально назван db2 "update EDU.contact set MOBILE_PHONE = '123'"
в каталоге с именем /opt/ibm/db2/current/bin/db2 connect to PLC; /opt/ibm/db2/current/bin
(да, он ищет db2 connect to PLC;
как каталог). Очевидно, что он не существует.