使用参数执行sh脚本

时间:2013-10-16 12:26:02

标签: php bash shell

我有自写的sh脚本,其中包含像“cd directory”

这样的结构

它已成功通过终端

运行
. /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');

正在运行,但目录更改无法正常工作

请帮忙。提前谢谢

5 个答案:

答案 0 :(得分:4)

您正在使用.启动命令 - 这将被解释为shell-source命令,这显然不是您想要的。而是指定完整路径并执行以下操作:

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

- 另外,请确保您的php用户有权执行您的sh脚本,并且PHP可以使用exec()之类的功能(可以通过配置禁用它们)

答案 1 :(得分:2)

你需要使用引号发送参数,试试这个:

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

答案 2 :(得分:0)

当PHP以安全模式运行时,此功能被禁用。检查你的php.ini文件,确保安全模式已关闭,并且它不在'disable_functions'中。

答案 3 :(得分:0)

Aviod:

  1. 使用.表示法,它在bash shell之外无效。请改用/bin/bash <yourscript>

  2. 尝试cd到相对路径,因为这限制了脚本的执行只能从特定位置完成

  3. 引用(或暗示).bash_profile资源,因为.bash_profile仅针对登录shell执行。如果适用,请改用.bashrc

答案 4 :(得分:0)

使用

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

而不是

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

...并确保您的 shell脚本对运行脚本的用户具有可执行权限。