3

我有自己编写的 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');

正在运行,但目录更改不起作用

请帮忙。先感谢您

4

5 回答 5

4

你开始你的命令.- 这将被解释为 shell-source 命令,这显然不是你想要的。而是指定完整路径并执行以下操作:

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

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

于 2013-10-16T12:29:46.430 回答
2

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

$command_result = shell_exec('script.sh "'.$param1.'" "'.$param2."');
于 2013-10-16T12:30:55.043 回答
0

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

于 2013-10-16T12:30:39.130 回答
0

避免:

  1. 使用.符号,它在 bash shell 之外不起作用。改为使用/bin/bash <yourscript>

  2. 尝试使用cd相对路径,因为这将脚本的执行限制为仅从特定位置完成

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

于 2013-10-16T20:04:51.907 回答
0

利用

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

代替

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

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

于 2017-04-29T07:17:30.403 回答