假设我在当前目录中有一个名为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
编辑: 问题解决了,或者实际上它本身就解决了...
答案 0 :(得分:1)
PowerShell本身不能执行.sh
脚本,因此它依赖于系统的GUI Shell(即所谓的Windows shell)来告诉它如何打开此类文件。
您的系统似乎已配置为使用a Git installation on Windows随附的Bash版本 Git Bash 打开(执行)此类文件。
但是,调用./myscript.sh
或Start-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.\"'