【问题标题】:PowerShell shell script running window auto close: Start-Process vs ./PowerShell shell 脚本运行窗口自动关闭:Start-Process vs ./
【发布时间】:2019-03-25 02:04:50
【问题描述】:

假设我在当前目录中有一个名为 myscript.sh 的 shell 脚本。

Start-Process myscript.sh./myscript.sh 都将在新的 bash 窗口中运行脚本,但在行为上有 1 个主要区别:

如果我在脚本结束后选择./myscript.sh,窗口会自动关闭,我没有机会看到输出,而Start-Process 不会关闭新窗口。

我想知道为什么,如果有办法改变它,因为./ 最终比Start-Process 更短更容易调用。

编辑: 下面是 PS 运行脚本后打开的 bash。我相信这是一个 git bash? enter image description here

编辑: 问题解决了,或者实际上它自己解决了......

【问题讨论】:

    标签: powershell git-bash


    【解决方案1】:

    PowerShell 本身不能执行.sh 脚本,因此它依赖系统的GUI shell(所谓的Windows shell)来告诉它如何打开这些文件。

    您的系统似乎配置为使用 Git Basha Git installation on Windows 附带的 Bash 版本)打开(执行)此类文件。

    但是,调用./myscript.shStart-Process ./myscript.sh 之间应该没有区别:两者都应该异步新窗口中使用 Bash 运行脚本,即一个 MINGW64 控制台窗口。

    请注意,运行此类脚本的唯一方法是在单独的窗口中运行,因为 Git 附带的 Bash 无法在常规控制台窗口中运行。
    通常,任何扩展名未在$env:PATHEXT 中列为直接可执行文件的文件都将在新的(可能是 GUI)窗口中运行。

    使用要执行的脚本路径调用的 Bash shell在要执行的脚本终止后自动退出,这也会关闭它运行的窗口。

    为防止窗口自动关闭,您可以在脚本执行后使用等待按键的命令;例如:

    & $env:ProgramFiles\Git\git-bash.exe -c './myscript.sh; read -n 1 -p \"Press a key to exit.\"'
    

    然而,这仍然会导致 异步 执行;要获得 同步 执行 - 即等到 Bash 窗口关闭,您必须将上述内容与 Start-Process -Wait 结合起来:

    Start-Process -Wait $env:ProgramFiles\Git\git-bash.exe -Args '-c', './myscript.sh; read -n 1 -p \"Press a key to exit.\"'
    

    【讨论】:

    • 实际上我已经修改了我的脚本,目前我无法再重现这个问题......所以你是对的,Start-Process myscript.sh./myscript.sh 都会调用一个自动关闭的 Git Bash最后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多