Я делаю сценарий, который я начинаю с bash.exe из Cygwin для Windows:

C:\bash.exe my_script.sh

Это меняет мой Python Virtual Env в зависимости от некоторых условий. Для тех, кто знает 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, и выход. Я был бы идеальным для выполнения пакетного workon.bat, оставаясь внутри cmd.

2 ответа2

1

Вместо

cmd /K "workon.bat" "$required_venv"

использование

cmd /C "workon.bat" "$required_venv"

Как он закроет новую оболочку после запуска командного файла, из cmd /?

/c  Carries out the command specified by String and then stops.
/k  Carries out the command specified by String and continues.
0

@matzeri ошибочен в отношении cmd /C поскольку он также закроет virtualenv, что неожиданно. Я думаю, что делать эту работу в Windows, используя Cygwin, Bash и script-shell, было плохой идеей, вместо этого я создал пакетный файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .