2013-10-16 149 views
3

我有自我所著sh腳本,其中包含像「光盤目錄」執行與參數sh腳本

它成功地通過終端

. /path/to/script.sh param1 param2 

我想通過PHP

運行此腳本運行敷設渠道
shell_exec('. /path/to/script.sh param1 param2'); 

shell_exec('. /path/to/script.sh "param1" "param2"'); 

無法正常運行

shell_exec('/bin/bash /path/to/script.sh param1 param2'); 

正在運行,但目錄更改不起作用

請幫忙。預先感謝您

+1

您最好使用完整路徑而不是使用'〜',因爲HOME在用戶之間是不同的。 – fedorqui

+0

你知道你在運行的命令之間有不止一個區別,對吧? –

+0

@ IgnacioVazquez-Abrams關閉'cd目錄中的課程 – indapublic

回答

4

您開始使用.命令 - 這將被解釋爲shell-source命令,顯然這不是您想要的。相反,指定完整路徑和不喜歡:

$result = shell_exec('/bin/bash /full/path/to/script.sh param1 param2'); 
//var_dump($result); 

- 同樣,確保你的PHP用戶有權執行您的SH-腳本和PHP可以使用功能,如exec()(他們可以通過配置禁用)

+0

是的,腳本已經成功運行,但是像「cd my_directory」這樣的結構不起作用 – indapublic

+0

你想用那個'cd'做什麼?你的腳本中發生了什麼?爲什麼你不能在腳本中使用完整路徑而不是使用'cd'? –

+0

'cd_one(cd_one是我在.bash_profile功能)'' 執行一些常規operations' 'cd_two(cd_two是功能在我的.bash_profile)'' 執行中的.bash_profile一些日常operations' – indapublic

0

當PHP在安全模式下運行時,此功能被禁用。檢查你的php.ini文件,並確保安全模式關閉,它不在'disable_functions'。

+0

函數正在工作 – indapublic

2

您需要使用引號派的論點,試試這個:

$command_result = shell_exec('script.sh "'.$param1.'" "'.$param2."'); 
+0

謝謝,我試過了。但它沒有幫助 – indapublic

0

Aviod:

  1. 使用.符號,這不會是bash shell之外工作。改爲使用/bin/bash <yourscript>

  2. 試圖cd爲相對路徑,因爲這限制所述腳本的執行從一個特定的位置只有

  3. 引用(或暗示).bash_profile資源來完成,如.bash_profile用於登錄shell只執行。如果適用,請改用.bashrc

0

使用

shell_exec('./path/to/script.sh param1 param2');

,而不是

shell_exec('. /path/to/script.sh param1 param2');

...,並確保您的shell腳本對誰是運行腳本的用戶可執行權限。