![从另一个 cmd.exe 启动的 cmd.exe](https://linux22.com/image/1575133/%E4%BB%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%20cmd.exe%20%E5%90%AF%E5%8A%A8%E7%9A%84%20cmd.exe.png)
bash.exe
我正在编写一个从 Windows 上的 Cygwin开始的脚本:
C:\bash.exe my_script.sh
它根据某些条件更改我的 Python 虚拟环境。对于那些了解 Virtualenv 的人来说,我需要使用“workon.bat”,而我知道执行批处理脚本的唯一方法是以下方法:
...
cmd /K "workon.bat" "$required_venv"
...
它可以工作,但我现在处于cmd.exe
从前一个实例启动的新实例中。证明:输入后exit
我回到了它:
C:\bash.exe my_script.sh *ENTER*
(venv) C:\
(venv) C:\exit *ENTER*
C:\
事实上,每次我启动该脚本时,我都会进入一个新实例:
cmd.exe
cmd.exe
cmd.exe
cmd.exe
...
如何解决这种令人讨厌的递归情况?一种解决方案可能是检测我是否在启动另一个 cmd 的 cmd 中并退出。我最好在 cmd 内执行批处理 workon.bat。
答案1
代替
cmd /K "workon.bat" "$required_venv"
使用
cmd /C "workon.bat" "$required_venv"
由于运行批处理文件后会关闭新的 shell,因此cmd /?
/c Carries out the command specified by String and then stops.
/k Carries out the command specified by String and continues.
答案2
@matzeri 错了,cmd /C
因为它还会关闭虚拟环境,这是意料之外的。我认为在 Windows 上使用 Cygwin、Bash 和 script-shell 完成这项工作是个坏主意,我最终改为使用批处理文件。