Linux

Bash:從使用 sudo 執行的腳本呼叫時找不到 php 命令

  • April 7, 2013

我有這個奇怪的問題。php在某一特定情況下找不到該命令。

我嘗試以三種不同的方式呼叫該命令。其中只有一個失敗:

  1. 作為使用者john,我創建了一個簡單的腳本,它呼叫php --version. 然後作為使用者root,我像這樣呼叫該腳本:sudo -u john ./script.sh

這樣php找不到命令。 2. 因為root我像這樣直接呼叫命令:sudo -u john php --version

這裡沒問題,命令確實存在。 3. 我直接以使用者 ‘john’ 的身份呼叫腳本:./script.sh

它也可以正常工作。

這是什麼原因造成的?

這個問題也發生在其他使用者身上,而不僅僅是john,而且它只發生在這台特定的機器上。

作業系統是 CentOS 5.9。

**編輯:**此外,其他命令如gcc,perlpython不存在此問題。該php命令是迄今為止我發現的唯一一個有問題的命令。

  1. 您的測試腳本缺少shebang 行。沒有湯給你。
  2. 腳本呼叫的子 shell 未使用與PATH互動式 shell 相同的變數。鍵入echo $PATH以查看您目前的路徑變數,並PATH在腳本中設置此變數。

至於為什麼PATH兩者之間的變數不一致:

  • 因為您沒有指定 shebang 行,所以您無法確保所呼叫的 shell 與您的互動式 shell 相同。它可能完全採購不同的配置文件。
  • 根據 shell 的執行方式,獲取不同的配置文件。您在互動式外殼中,您的腳本是非互動式外殼。假設您正在嘗試使用bash,請查閱文件頂部附近的部分man bash並開始閱讀。INVOCATION

引用自:https://serverfault.com/questions/496935