Command-Line

如何在 sudo 中執行它?

  • April 12, 2018

我有從 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 帳戶下執行,一切正常。

我真的不太清楚你為什麼會收到這個錯誤。我有一個帶有 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;)。這顯然是不存在的。

引用自:https://unix.stackexchange.com/questions/42777