Linux
Bash:從使用 sudo 執行的腳本呼叫時找不到 php 命令
我有這個奇怪的問題。
php
在某一特定情況下找不到該命令。我嘗試以三種不同的方式呼叫該命令。其中只有一個失敗:
- 作為使用者
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
,perl
或python
不存在此問題。該php
命令是迄今為止我發現的唯一一個有問題的命令。
- 您的測試腳本缺少shebang 行。沒有湯給你。
- 腳本呼叫的子 shell 未使用與
PATH
互動式 shell 相同的變數。鍵入echo $PATH
以查看您目前的路徑變數,並PATH
在腳本中設置此變數。至於為什麼
PATH
兩者之間的變數不一致:
- 因為您沒有指定 shebang 行,所以您無法確保所呼叫的 shell 與您的互動式 shell 相同。它可能完全採購不同的配置文件。
- 根據 shell 的執行方式,獲取不同的配置文件。您在互動式外殼中,您的腳本是非互動式外殼。假設您正在嘗試使用
bash
,請查閱文件頂部附近的部分man bash
並開始閱讀。INVOCATION