cmd.exe запущен с другого cmd.exe

373
snoob dogg

Я делаю сценарий, который я начинаю с bash.exeCygwin для 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.

0

2 ответа на вопрос

1
matzeri

Вместо

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. 
К сожалению, это не работает, потому что, если он закрывает новую оболочку, он также закрывает виртуальный venv, верно? : ( snoob dogg 5 лет назад 0
использование / c не сохраняет virtualenv: / snoob dogg 5 лет назад 0
0
snoob dogg

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