Odpowiednik ^ D (w bash) dla cmd.exe?

27

Czy istnieje równoważne naciśnięcie klawisza w celu wyjścia z wiersza polecenia w systemie Windows (uruchomionego przez Start-> Uruchom: cmd) do trybu gotowości bash Ctrl- daby uniknąć konieczności pisania, exitaby opuścić powłokę?

królikarnia
źródło

Odpowiedzi:

19

Nie. CtrlDNa * nix generuje EOF, który różne powłoki interpretują jako działające exit. Odpowiednikiem EOF w systemie Windows jest CtrlZ, ale cmd.exe nie interpretuje tego specjalnie po wpisaniu w wierszu polecenia.

Ignacio Vazquez-Abrams
źródło
3
W większości nowoczesnych powłok terminal nie jest w trybie wprowadzania kanonicznego, gdy powłoka interaktywnie akceptuje dane wejściowe, i Ctrl+Djest w rzeczywistości zwykłym znakiem, a nie znakiem specjalnym EOF. Powłoki łączą się Ctrl+Dz działaniem GNU Readline lub ZLE, która kończy działanie (ale tylko wtedy, gdy bufor edycji linii jest pusty), więc zachowanie jest w większości takie samo. Ale nieCtrl+D jest EOF z nowoczesnymi pociskami, tylko zwykłą postacią kontrolną. Zachowanie, gdy bufor edycji nie jest pusty, różni się znacznie od tego, co dzieje się ze znakiem specjalnym EOF.
JdeBP
3
Rzeczywiście, najbliższy Windows NT odpowiada temu bashi in. są rzeczywiście robi to TCC / LE alias autoexecuting klawiatury, takie jak ten , w którym interpreter poleceń (nie konsola) rozpoznaje zwykły kombinację klawiszy ALT+F4 podczas edycji wiersza i wykonuje wbudowanego exitpolecenia w odpowiedzi.
JdeBP
@JdeBP Wychodząc z tego jako punktu wyjścia, właśnie przetestowałem to za pomocą bash 4.4.12 i stty -azwraca icanon(tj. Nie -icanon). Czy Twój komentarz jest With most modern shells, the terminal is not in canonical input mode when the shell is interactively accepting inputnaprawdę poprawny statystycznie w tym momencie?
levant pied
10

Alt- Space. Potem C.

Tak, jest trochę wolniejszy niż Ctrl- D. Ale to jest odpowiedź na dokładnie to, o co prosisz: wbudowaną równoważną sekwencję klawiszy, która pozwala wyjść z monitu bez konieczności wpisywania exitpolecenia. Żadne oprogramowanie innych firm nie jest potrzebne.

To może nie działać absolutnie identycznie jak bash: bash wyloguje się tylko z pustego wiersza poleceń. W systemie Windows może to zamknąć okno, nawet jeśli wpisałeś już w nim częściowe polecenie.

TOOGAM
źródło
: D: D: D: D: D: D
Fatih
3

Możesz użyć DOSKEY do tworzenia makr w CMD.exe.

Aby utworzyć typ makra:

DOSKEY [macroname]=[command(s)]

W ten sposób możesz powiązać klucz z innym poleceniem.

Przykład:

DOSKEY e=exit

będzie wiązać esię z exitpoleceniem, więc kiedy wpiszesz an ew pytaniu, będzie to wyglądało tak, jakbyś wprowadziłexit

Nie jestem pewien, czy możesz użyć CTRL- $nkombinacji jako makr

Nate Koppenhaver
źródło
Większość znaków kontrolnych działa dobrze (oczywiście z wyjątkiem tych obsługiwanych już przez konsolę). Ale cmdpo prostu interpretuje je jako normalne polecenia, czekające na Enternaciśnięcie, więc nie ma żadnej korzyści z aliasingu Ctrl-Z w porównaniu z just elub x.
grawity
3

Naprawiono podejście z automatycznym klawiszem. (Nie mogę dodać komentarza.)

#IfWinActive, ahk_class ConsoleWindowClass
  ^d::
    ; First send ESC, in case we're in select mode.
    Send {Esc}{Esc}exit{Enter}
#IfWinActive
Kirby
źródło
1

Istnieje teraz projekt open source o nazwie clink na http://code.google.com/p/clink/ (edycja: przeniesiono do http://mridgers.github.io/clink/ ) - zapewnia on funkcjonalność uniksowego readline do wiersz polecenia systemu Windows.

Obsługuje większość funkcji, w tym edycję wiersza poleceń, wyszukiwanie historii, uzupełnianie tabulatorów wraz ze skryptami uzupełniania itp. Warto sprawdzić, dzięki czemu cmd jest znacznie mniej ssący. ;]

HerbCSO
źródło
0

Ten sam efekt można uzyskać za pomocą tego fragmentu AutoHotKey :

; Close Command Prompt when pressing Ctrl+D
#IfWinActive, Command Prompt$
  ^d::
    ; First send ESC, in case we're in select mode.
    Send {Esc}{Esc}exit{Enter}
#IfWinActive
Der Hochstapler
źródło
Nie wydaje się działać, jakieś wskazówki dlaczego?
Avindra Goolcharan
@AvindraGoolcharan: Powiedziano mi, że w zależności od sposobu uruchomienia wiersza polecenia tytuł okna może różnić się od tego, którego użyłem w tym skrypcie. Drugi wiersz może wymagać dostosowania w zależności od preferencji.
Der Hochstapler,