【问题标题】:Executing a bash script without shell window showing执行不显示 shell 窗口的 bash 脚本
【发布时间】:2016-05-14 04:50:06
【问题描述】:

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

但是,我需要一种在不出现 shell 的情况下运行 bash 脚本的方法。在下面显示的 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 &");   
    } 
} 

编辑:出现的shell窗口是Git Bash

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

【问题讨论】:

  • 我猜这是出现的 Cygwin 窗口。 Windows 本身不会对如何处理 shell 脚本有最微弱的想法……会吗? (基于chdir('C:\xampp\htdocs\p-master\tools');我假设你正在运行Windows)你告诉 cmd 到start \B test.sh
  • 该窗口是 Git Bash,是的,我正在运行 Windows。
  • 我不是 100% 对此,但我不确定 background 标志 (/b) 是否真的在这里工作 - 这将确保 cmd 提示窗口不一定出现下面的 Bash 窗口。您可以尝试将start 替换为sh.exe 的路径并使用& 标志,就像您对*nix 所做的那样......也许。
  • 您好,感谢您尝试过,但恐怕没有运气!
  • 这是指 Cygwin ...但它可能会提供一些帮助;恐怕我对 Windows 上的 Bash 有点不知所措;)stackoverflow.com/questions/673278/…

标签: php windows bash shell


【解决方案1】:

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

您还需要将您正在执行的脚本从test.sh 文件中取出,并将其放入PHP 函数中,并将其作为参数传递给shell_exec 函数。窗口一直打开的原因是您在这里所做的实际上与双击计算机上的文件打开它一样,您实际上是在告诉命令行在命令行窗口中打开该文件然后运行里面的脚本。

语法

string shell_exec(string $cmd);

来源

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

【讨论】:

  • 嗨,最初尝试过,但窗口仍然出现,脚本确实可以工作,但我需要它在不出现 shell 窗口的情况下工作!
  • 请参阅我对答案所做的编辑,将代码从 test.sh 文件中移出并将其放入 PHP 文件中,并将其作为参数传递给 shell_exec 函数。我已经在我的机器上进行了测试,它运行良好。
  • 您实际上是在告诉命令行在命令行窗口中打开此文件,然后运行其中的脚本 ...除了他使用的是/b应该告诉 cmd not 打开一个窗口的标志 - 它是出现的 Git Bash 窗口......但是,将 shell 代码移动到 PHP 中并使用 shell_exec() 应该巧妙地回避这个问题。
  • 你好怎么直接把命令写进去?我有这样的,但它不工作 shell_exec("pyang -f yin -o H:\\YangModels\\yin\\types-ipos.yin types-ipos.yang");
猜你喜欢
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多