如何在 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'\""

它在 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;一个目录)。这显然不存在。

相关内容