我有从 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'\""
它在 Sudo 版本上运行良好1.7.2。
现在我有了新的服务器SUSE Linux Enterprise Server 11 (x86_64)
。没有 sudo 所以我从存储库安装了它(Sudo 版本1.6.9p17) 但要知道上面的语法不起作用。它抛出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;
一个目录)。这显然不存在。