powershell - 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? 在此处输入图像描述
编辑:问题解决了,或者实际上它自己去了......
解决方案
PowerShell 本身不能执行.sh
脚本,因此它依赖于系统的 GUI shell(所谓的Windows shell)来告诉它如何打开这些文件。
您的系统似乎已配置为使用Git Bash打开(执行)此类文件,这是Windows 上 Git 安装附带的 Bash 版本。
但是,调用或: 两者之间应该没有区别,两者都应该在新窗口中使用 Bash异步运行脚本,即 MINGW64 控制台窗口。 ./myscript.sh
Start-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.\"'
推荐阅读
- angular - 使用 cdkFocusInitial 运行材质对话框组件的开玩笑单元测试时,如何修复“[cdkFocusInitial]”不可聚焦警告?
- python - 为什么 Airflow PythonOperator 任务失败但返回码为 0?
- haskell - 为什么我会收到“约束匹配实例声明”错误?
- java - 添加边的加权有向图不起作用
- sql - 如何访问 Zend Framework 3 中执行的 SQL 查询?
- python - Xgboost n_estimators 与显示的树数不匹配
- ios - IOS 实习生 - 由于 xcodebuild 失败,无法启动 WebDriverAgent:未找到:carthage
- google-bigquery - 我们可以绕过 BigQuery 数据连接器 10000 行的限制吗?
- c++ - Why is a re-constructed map type different from the original one?
- python - DJANGO virtual env unable to import models when running a standalone script