[請益] php exec 使用什麼 shell ?

看板PHP作者 (玉米)時間14年前 (2012/01/06 13:48), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串1/1
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
sh的第一課:分清楚interactive和non-interactive的差別
01/06 20:06, 1F

01/06 20:06, , 2F
入門的書都會強調這點,就不引了
01/06 20:06, 2F

01/10 17:39, , 3F
找出答案了,事實上是exec是直接呼叫程式,不透過 shell
01/10 17:39, 3F

01/10 17:40, , 4F
所以沒有 source 這個 bash 命令。和 inter/non-inter無關
01/10 17:40, 4F
文章代碼(AID): #1F1eiUK8 (PHP)
文章代碼(AID): #1F1eiUK8 (PHP)