从另一个 cmd.exe 启动的 cmd.exe

从另一个 cmd.exe 启动的 cmd.exe

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 完成这项工作是个坏主意,我最终改为使用批处理文件。

相关内容