Как запустить это в sudo?

Как запустить это в sudo?

У меня есть эта строка, которую я выполняю из 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;как каталог). Очевидно, что он не существует.

Связанный контент