Еквівалентно ^ D (в баші) для cmd.exe?


27

Чи є еквівалентний ключ-штрих для виходу з командного рядка в Windows (запущений через Start-> Run: cmd) в режим очікування bash Ctrl- dщоб запобігти необхідності введення, exitщоб залишити оболонку?

Відповіді:


19

Ні. CtrlD* Nix генерує EOF, який різні оболонки інтерпретують як біг exit. Еквівалент для EOF в Windows є CtrlZ, але cmd.exe не інтерпретує це спеціально, коли вводиться у запиті.


3
У більшості сучасних оболонок термінал не знаходиться в режимі канонічного введення, коли оболонка інтерактивно приймає вхід, а Ctrl+Dнасправді є просто звичайним символом, а не спеціальним символом EOF. Оболонки прив’язуються Ctrl+Dдо дії GNU Readline або ZLE, яка завершується (але тільки якщо буфер редагування рядків порожній), тому поведінка є здебільшого тим самим результатом. Але Ctrl+Dчи не EOF із сучасними снарядами, а просто звичайний контрольний персонаж. Поведінка, коли буфер редагування не порожній, помітно відрізняється від того, що відбувається із спеціальним символом EOF.
JdeBP

3
Дійсно, найближчий Windows NT еквівалентний тому, що bashта ін. які на насправді роблять це TCC / LE autoexecuting клавіатури псевдонім, такий як цей , де інтерпретатор команд (НЕ консоль) розпізнає звичайну комбінацію клавіш ALT+F4 під час редагування рядка і виконує вбудовану exitкоманду у відповідь.
JdeBP

@JdeBP Відміняючи це як вихідну точку, я щойно перевірив це з bash 4.4.12 і stty -aповертає icanon(тобто ні -icanon). Чи With most modern shells, the terminal is not in canonical input mode when the shell is interactively accepting inputсправді ваш коментар є статистично правильним на даний момент часу?
левант піє

10

Alt- Space. Тоді C.

Так, це трохи повільніше, ніж Ctrl- D. Але це відповідь на саме те, що ви просите: вбудована еквівалентна послідовність обведення ключів, яка дозволяє виходити з підказки без необхідності вводити exitкоманду. Жодне сторонне програмне забезпечення не потрібно.

Це може не працювати абсолютно ідентично bash: bash буде виходити лише з порожнього командного рядка. У Windows це вікно може закрити, навіть якщо ви вже ввели часткову команду.


: D: D: D: D: D: D
Fatih

3

Ви можете використовувати DOSKEY для створення макросів у CMD.exe.

Щоб створити тип макросу:

DOSKEY [macroname]=[command(s)]

Таким чином ви можете прив’язати ключ до іншої команди.

Приклад:

DOSKEY e=exit

буде прив'язуватися eдо exitкоманди, тож коли ви вводите eвказівку, це буде так, як ви вводитеexit

Я не впевнений , якщо ви можете використовувати CTRL- $nкомбінації в вигляді макросів , хоча


Більшість контрольних символів працює нормально (крім тих, що вже обробляються консоллю, звичайно). Але вони cmdпросто інтерпретують їх як звичайні команди, очікуючи Enterїх натискання, тому немає переваги згладжування Ctrl-Z порівняно з просто eабо x.
grawity

3

Фіксований підхід автоматичної клавіші. (Я не можу додати коментар.)

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

1

Зараз на сайті http://code.google.com/p/clink/ (редакція: він перейшов на http://mridgers.github.io/clink/ ) існує проект з відкритим кодом, який називається clink - він приносить функцію читання Unix для командний рядок Windows.

Він підтримує більшість функціональних можливостей, включаючи редагування командного рядка, пошук історії, завершення вкладки разом із сценаріями завершення тощо. Варто перевірити, робить смоктання cmd набагато менше. ;]


0

Ви можете отримати такий же ефект за допомогою цього фрагмента 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

Здається, це не працює, підказки чому?
Avindra Goolcharan

@AvindraGoolcharan: Мені сказали, що залежно від того, як ви запускаєте командний рядок, заголовок вікна може відрізнятися від того, що я використовував у цьому сценарії. Другий рядок може потребувати коригування залежно від ваших уподобань.
Der Hochstapler
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.