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.

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.

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.