执行不显示 shell 窗口的 bash 脚本


Executing a bash script without shell window showing

嗨,我正在尝试通过 PHP 执行 bash 脚本,当脚本运行时,shell 界面出现几秒钟,然后消失。

但是我需要的是一种运行 bash 脚本而不出现 shell 的方法。在下面显示的 php 网站上找到了 execInBackground 函数,但它对我不起作用。最好的方法是什么?

function convert($tmpName, $fileName, $fileSize, $fileType){
    $old_path = getcwd();
    chdir('C:'xampp'htdocs'p-master'tools');
    execInBackground("test.sh");
    chdir($old_path);
}
function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    } 
} 

编辑:出现的外壳窗口是 Git Bash

编辑2:仍然有这个问题,尝试了所有建议的解决方案,并从网络上尝试了不同的解决方案,但没有运气,任何人都可以帮助解决这个问题吗?

您可以使用 PHP 中内置的 shell_exec 函数。它将通过 shell 执行命令,并在发生错误时以字符串或 null 值的形式返回完整的输出。

您还需要从test.sh文件中取出正在执行的脚本,并将其放入 PHP 函数中,并将其作为参数传递给shell_exec函数。窗口不断打开的原因是,您在此处执行的操作实际上与双击计算机上的文件以打开它相同,您实际上是在告诉命令行在命令行窗口中打开此文件,然后运行其中的脚本。

语法

string shell_exec(string $cmd);

来源

http://php.net/manual/en/function.shell-exec.php