我有自写的sh脚本,其中包含像"cd目录"这样的结构
它已成功通过终端运行
. /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');
正在运行,但目录更改不起作用
请帮忙。提前谢谢你
你从.
开始你的命令 - 这将被解释为 shell-source 命令,这显然不是你想要的。而是指定完整路径并执行以下操作:
$result = shell_exec('/bin/bash /full/path/to/script.sh param1 param2');
//var_dump($result);
- 另外,请确保您的PHP用户有权执行您的sh脚本,并且PHP可以使用exec()
等函数(可以通过配置禁用它们)
你需要使用引号来发送参数,试试这个:
$command_result = shell_exec('script.sh "'.$param1.'" "'.$param2."');
当 PHP 在安全模式下运行时,此功能将被禁用。检查您的 php.ini 文件并确保安全模式已关闭且不在"disable_functions"中。
Aviod:
-
使用
.
表示法,这在 bash shell 之外不起作用。请改用/bin/bash <yourscript>
。 -
尝试
cd
相对路径,因为这限制了脚本的执行只能从特定位置完成 -
引用(或暗示)
.bash_profile
资源,因为.bash_profile
仅对登录 shell 执行。如果适用,请改用.bashrc
。
使用
shell_exec('./path/to/script.sh param1 param2');
而不是
shell_exec('. /path/to/script.sh param1 param2');
。并确保您的 shell 脚本对运行脚本的用户具有可执行权限。