Equivalent à ^ D (en bash) pour cmd.exe?

27

Existe-t-il un raccourci clavier équivalent pour quitter une invite de commande sous Windows (lancée via Démarrer-> Exécuter: cmd) à la veille bash de Ctrl- dpour éviter d'avoir à taper exitpour quitter le shell?

garenne
la source

Réponses:

19

Non. On CtrlD* nix génère un EOF, que divers shells interprètent comme fonctionnant exit. L'équivalent d'EOF sur Windows est CtrlZ, mais cmd.exe n'interprète pas cela spécialement lorsqu'il est tapé à l'invite.

Ignacio Vazquez-Abrams
la source
3
Avec la plupart des shells modernes, le terminal n'est pas en mode d'entrée canonique lorsque le shell accepte interactivement des entrées, et Ctrl+Dn'est en fait qu'un caractère ordinaire et non un caractère spécial EOF. Les shells se lient Ctrl+Dà une action GNU Readline ou ZLE qui se termine (mais uniquement si le tampon d'édition de ligne est vide), le comportement est donc généralement le même. Mais ce Ctrl+Dn'est pas EOF avec des obus modernes, juste un personnage de contrôle ordinaire. Le comportement lorsque le tampon d'édition n'est pas vide est nettement différent de ce qui se produit avec un caractère spécial EOF.
JdeBP
3
En effet, l'équivalent Windows NT le plus proche de ce que bashet al. que vous êtes en train de faire est un alias de clavier à exécution automatique TCC / LE , comme celui-ci , où l'interpréteur de commandes (pas la console) reconnaît la combinaison de touches ordinaire ALT+F4 pendant l'édition de ligne et exécute la exitcommande intégrée en réponse.
JdeBP
@JdeBP En partant de cela comme point de départ, je viens de le tester avec bash 4.4.12 et stty -aretourne icanon(c'est-à-dire pas -icanon). Votre commentaire est-il With most modern shells, the terminal is not in canonical input mode when the shell is interactively accepting inputvraiment statistiquement correct en ce moment?
levant pied
10

Alt- Space. Ensuite, C.

Ouais, c'est un peu plus lent que Ctrl- D. Mais c'est la réponse à exactement ce que vous demandez: la séquence de touches équivalentes intégrée qui vous permet de quitter l'invite sans avoir à taper la exitcommande. Aucun logiciel tiers requis.

Cela peut ne pas fonctionner de manière absolument identique à bash: bash ne se déconnectera que sur une ligne de commande vide. Sous Windows, cela peut fermer la fenêtre, même si vous avez déjà tapé une commande partielle dessus.

TOOGAM
la source
: D: D: D: D: D: D
Fatih
3

Vous pouvez utiliser DOSKEY pour créer des macros dans CMD.exe.

Pour créer un type de macro:

DOSKEY [macroname]=[command(s)]

De cette façon, vous pouvez lier une clé à une autre commande.

Exemple:

DOSKEY e=exit

se lierait eà la exitcommande, donc lorsque vous entrez un eà l'invite, ce serait comme si vous saisissiez unexit

Je ne sais pas si vous pouvez utiliser CTRL- $ncombinaisons comme macros Bien que

Nate Koppenhaver
la source
La plupart des personnages de contrôle fonctionnent bien (sauf ceux déjà gérés par la console, bien sûr). Mais les cmdinterprète simplement comme des commandes normales, attendant Enterd'être pressées, il n'y a donc aucun avantage à aliaser Ctrl-Z par rapport à juste eou x.
grawity
3

Correction de l'approche autohotkey. (Je ne peux pas ajouter de commentaire.)

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

Il existe maintenant un projet open source appelé clink sur http://code.google.com/p/clink/ (modifier: il a été déplacé vers http://mridgers.github.io/clink/ ) - il apporte la fonctionnalité de ligne de lecture Unix à l'invite de commande Windows.

Il prend en charge la plupart des fonctionnalités, y compris l'édition en ligne de commande, la recherche d'historique, la complétion d'onglets ainsi que les scripts de complétion, etc. ;]

HerbCSO
la source
0

Vous pouvez obtenir le même effet avec cet extrait de code 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
la source
Ça ne semble pas marcher, des indices pourquoi?
Avindra Goolcharan
@AvindraGoolcharan: On m'a dit, selon la façon dont vous démarrez l'invite de commandes, le titre de la fenêtre peut être différent de ce que j'ai utilisé dans ce script. La deuxième ligne peut nécessiter des ajustements en fonction de vos préférences.
Der Hochstapler