首页 > 解决方案 > PowerShell shell 脚本运行窗口自动关闭:Start-Process vs ./

问题描述

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

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

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

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

编辑:下面是 PS 运行脚本后打开的 bash。我相信这是一个 git bash? 在此处输入图像描述

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

标签: powershellgit-bash

解决方案


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

您的系统似乎已配置为使用Git Bash打开(执行)此类文件,这是Windows 上 Git 安装附带的 Bash 版本。

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

请注意,运行此类脚本的唯一方法是在单独的窗口中,因为 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.\"'

推荐阅读