cmd.exe uruchomiony z innego cmd.exe

0

Robię skrypt, który zaczynam bash.exeod Cygwin w systemie Windows:

C:\bash.exe my_script.sh

Zmienia moje wirtualne środowisko Python w zależności od niektórych warunków. Dla tych, którzy znają Virtualenv, muszę użyć „workon.bat”, a jedynym sposobem na wykonanie skryptu wsadowego jest następujący:

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

Działa, ale teraz jestem w nowej cmd.exeinstancji uruchomionej z poprzedniej. Dowód: pisanie exitsprowadza mnie z powrotem do tego:

C:\bash.exe my_script.sh  *ENTER*
(venv) C:\
(venv) C:\exit            *ENTER*
C:\

W rzeczywistości za każdym razem, gdy uruchomię ten skrypt, będę w nowej instancji:

cmd.exe
    cmd.exe
        cmd.exe
           cmd.exe
               ...

Jak rozwiązać tę irytującą sytuację rekurencyjną? Jednym z rozwiązań może być wykrycie, że jestem w cmd uruchomionym na innym i wyjście. Byłbym idealny do wykonania wsadowego workon.bat pozostając wewnątrz cmd.

Snoob Dogg
źródło

Odpowiedzi:

1

Zamiast

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

Posługiwać się

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

Ponieważ zamknie nową powłokę po uruchomieniu pliku wsadowego, z cmd /?

/c  Carries out the command specified by String and then stops.
/k  Carries out the command specified by String and continues.
matzeri
źródło
To nie działa niestety, ponieważ jeśli zamknie nową powłokę, zamknie także wirtualny venv, prawda? : (
snoob dogg
użycie / c nie zachowuje virtualenv: /
snoob dogg
0

@matzeri się myli, cmd /Cponieważ zamknie także virtualenv, co jest nieoczekiwane. Myślę, że wykonanie tej pracy w systemie Windows przy użyciu Cygwin, Bash i powłoki skryptowej było złym pomysłem, zamiast tego zrobiłem plik wsadowy.

Snoob Dogg
źródło