Entspricht ^ D (in Bash) für cmd.exe?


27

Gibt es einen äquivalenten Tastendruck zum Verlassen einer Eingabeaufforderung unter Windows (über Start-> Ausführen: cmd gestartet) in den Bash-Standby von Ctrl- d, um zu verhindern, dass Sie etwas eingeben müssen exit, um die Shell zu verlassen?

Antworten:


19

Nein. CtrlDOn * nix generiert eine EOF, die von verschiedenen Shells als ausgeführt interpretiert wird exit. Das Äquivalent für EOF unter Windows ist CtrlZ, aber cmd.exe interpretiert dies nicht speziell, wenn Sie es an der Eingabeaufforderung eingeben.


3
Bei den meisten modernen Shells befindet sich das Terminal nicht im kanonischen Eingabemodus, wenn die Shell interaktiv Eingaben akzeptiert, sondernCtrl+D ist lediglich ein gewöhnliches Zeichen und kein EOF-Sonderzeichen. Shells binden Ctrl+Dan eine GNU Readline- oder ZLE-Aktion, die beendet wird (jedoch nur, wenn der Zeilenbearbeitungspuffer leer ist), sodass das Verhalten größtenteils dasselbe Ergebnis hat. Aber Ctrl+Dist nicht EOF mit modernen Muscheln, nur ein gewöhnlicher Steuercharakter. Das Verhalten, wenn der Bearbeitungspuffer nicht leer ist, unterscheidet sich deutlich von dem, was mit einem EOF-Sonderzeichen geschieht.
JdeBP

3
Das nächste Windows NT-Äquivalent zu dem von what bashet al. sind tatsächlich tut , ist eine TCC / LE autoexecuting Tastatur alias, wie diese , wobei der Befehlsinterpreter (nicht die Konsole) erkennt die gewöhnliche Tastenkombination ALT+F4 während der Zeilenbearbeitung und führt die ich im internen exitBefehl als Antwort.
JdeBP

@JdeBP off gehen diese als Ausgangspunkt, ich dies nur getestet mit Bash 4.4.12 und stty -akehrt icanon(also nicht -icanon). Ist Ihr Kommentar With most modern shells, the terminal is not in canonical input mode when the shell is interactively accepting inputzu diesem Zeitpunkt statistisch wirklich korrekt?
Levante gescheckt

10

Alt-Space . Dann C.

Ja, es ist etwas langsamer als Ctrl - D. Dies ist jedoch die Antwort auf genau das, wonach Sie suchen: die integrierte äquivalente Tastenfolge, mit der Sie die Eingabeaufforderung verlassen können, ohne den exitBefehl eingeben zu müssen . Keine Software von Drittanbietern erforderlich.

Dies funktioniert möglicherweise nicht absolut identisch mit bash: bash meldet sich nur in einer leeren Befehlszeile ab. In Windows kann das Fenster dadurch geschlossen werden, auch wenn Sie bereits einen Teilbefehl eingegeben haben.


: D: D: D: D: D
Fatih

3

Sie können DOSKEY verwenden , um Makros in CMD.exe zu erstellen.

So erstellen Sie einen Makrotyp:

DOSKEY [macroname]=[command(s)]

Auf diese Weise können Sie eine Taste an einen anderen Befehl binden.

Beispiel:

DOSKEY e=exit

würde ean den exitBefehl binden , also bei der Eingabe einese in die Eingabeaufforderung eingeben, würde dies so aussehen eingebenexit

Ich bin mir nicht sicher, ob Sie CTRL- $nKombinationen als Makros verwenden können


Die meisten Steuerzeichen funktionieren einwandfrei (mit Ausnahme derjenigen, die natürlich bereits von der Konsole verarbeitet werden). Sie werden jedoch cmdnur als normale Befehle interpretiert, die darauf warten Enter, gedrückt zu werden. Das Aliasing von Strg-Z gegenüber "nur" eoder " nur" bietet also keinen Vorteil x.
Grawity

3

Problem mit Autohotkey behoben. (Ich kann keinen Kommentar hinzufügen.)

#IfWinActive, ahk_class ConsoleWindowClass
  ^d::
    ; First send ESC, in case we're in select mode.
    Send {Esc}{Esc}exit{Enter}
#IfWinActive

1

Es gibt jetzt ein Open-Source-Projekt mit dem Namen clink unter http://code.google.com/p/clink/ (bearbeiten: es wurde nach http://mridgers.github.io/clink/ verschoben ) die Windows-Eingabeaufforderung.

Es unterstützt die meisten Funktionen, einschließlich Befehlszeilenbearbeitung, Verlaufssuche, Vervollständigung von Registerkarten zusammen mit Vervollständigungsskripten usw. Es lohnt sich, dies zu überprüfen, und macht cmd viel weniger nervenaufreibend. ;]


0

Mit diesem AutoHotKey- Snippet können Sie den gleichen Effekt erzielen :

; 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

Scheint nicht zu funktionieren, irgendwelche Anhaltspunkte warum?
Avindra Goolcharan

@ AvindraGoolcharan: Mir wurde gesagt, je nachdem, wie Sie die Eingabeaufforderung starten, kann sich der Fenstertitel von dem unterscheiden, was ich in diesem Skript verwendet habe. In der zweiten Zeile müssen Sie möglicherweise Anpassungen vornehmen.
Der Hochstapler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.