2013-10-16 114 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脚本对谁是运行脚本的用户可执行权限。