[請益] php exec 使用什麼 shell ?
php exec 在執行的時候...到底是用什麼 shell 環境?
# 我的機器是用 nginx + php-cgi
# php+cgi 的執行身份是我的帳號,設定在 /etc/init.d/php-fcgi 裡面
當我們用 php 的 exec 指令,想要叫電腦執行某些指令或者 shell script 時候
可能會遇到問題
因為 exce 使用 /bin/sh 作為執行的環境
而 linux 可能使用 /bin/sh -> /bin/dash 當作 /bin/sh 來使用
而 dash 沒有 source 這種 shell command,bash 才有。
這是第一個問題
第二個問題:當我rm /bin/sh;sudo ln -s /bin/bash /bin/sh
看起來應該可以讓我的 php 的 exec() 使用 bash 作為執行環境了
但是為什麼動作的結果和我自己在登入電腦之後在 bash 環境下執行的結果不一樣?
例如 source .bashrc ,顯示 file not found
在 sh 的情況下是因為在 PATH 裡面搜尋不到檔案的話, sh 不會到當前目錄再進行搜尋
但是 bash 在 PATH 裡面搜尋不到檔案的話, bash 是會到當前目錄進行搜尋的
BUT,當我把 /bin/sh -> /bin/bash 之後,用 exec 呼叫
他似乎不是這樣運作…what the fuxx …
解法:
exec("/bin/bash -c\"source .bashrc\" ");
這樣,我解決了我的問題。
但我依然不知道 exec 執行的時候用 bash 跟我帳號登入機器執行 bash 為什麼會不一樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.64.222
→
01/06 20:06, , 1F
01/06 20:06, 1F
→
01/06 20:06, , 2F
01/06 20:06, 2F
→
01/10 17:39, , 3F
01/10 17:39, 3F
→
01/10 17:40, , 4F
01/10 17:40, 4F
PHP 近期熱門文章
PTT數位生活區 即時熱門文章