PowerShell Shell脚本运行窗口自动关闭:启动过程与./

时间:2018-10-20 10:59:37

标签: powershell git-bash

假设我在当前目录中有一个名为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

编辑: 问题解决了,或者实际上它本身就解决了...

1 个答案:

答案 0 :(得分:1)

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

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

但是,调用./myscript.shStart-Process ./myscript.sh之间应该没有 区别:两者都应异步新窗口,即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.\"'