我有自写的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');
正在运行,但目录更改无法正常工作
请帮忙。提前谢谢
答案 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:
使用.
表示法,它在bash shell之外无效。请改用/bin/bash <yourscript>
。
尝试cd
到相对路径,因为这限制了脚本的执行只能从特定位置完成
引用(或暗示).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脚本对运行脚本的用户具有可执行权限。