PowerShell shell 脚本 运行 window 自动关闭:启动进程与 ./

PowerShell shell script running window auto close: Start-Process vs ./

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

Start-Process myscript.sh./myscript.sh 都会 运行 新的脚本 bash window,但在行为上有 1 个主要差异:

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

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

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

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

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

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

但是,调用 ./myscript.shStart-Process ./myscript.sh 之间应该 没有 区别:两者都应该 异步 运行 new window 中带有 Bash 的脚本,即 MINGW64 控制台 window.

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

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

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

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

然而,这仍然会导致异步执行;要获得 同步 执行 - 即等待 Bash window 关闭,您必须将上述内容与 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.\""'