使用参数执行 sh 脚本


Execute sh script with parameters

我有自写的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:

  1. 使用 . 表示法,这在 bash shell 之外不起作用。请改用/bin/bash <yourscript>

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

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

使用

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

而不是

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

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