看板 PHP 關於我們 聯絡資訊
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
MOONRAKER:sh的第一課:分清楚interactive和non-interactive的差別 01/06 20:06
MOONRAKER:入門的書都會強調這點,就不引了 01/06 20:06
iwhiori:找出答案了,事實上是exec是直接呼叫程式,不透過 shell 01/10 17:39
iwhiori:所以沒有 source 這個 bash 命令。和 inter/non-inter無關 01/10 17:40