เทียบเท่ากับ ^ D (ใน bash) สำหรับ cmd.exe?


27

มีจังหวะคีย์เทียบเท่าสำหรับการออกจากพรอมต์คำสั่งบน Windows (เรียกใช้ผ่านทาง Start-> Run: cmd) ไปที่ bash แสตนด์บายCtrl- dเพื่อป้องกันไม่ให้ต้องพิมพ์exitเพื่อออกจากเชลล์หรือไม่?

คำตอบ:


19

ไม่CtrlDบน * ระวังสร้าง EOF ซึ่งเชลล์ต่างๆตีความว่าทำงานexitอยู่ เทียบเท่าสำหรับ EOF บน Windows คือCtrlZแต่ cmd.exe ไม่ได้แปลสิ่งนี้เป็นพิเศษเมื่อพิมพ์ที่พรอมต์


3
ด้วยเชลล์ที่ทันสมัยที่สุดเทอร์มินัลไม่ได้อยู่ในโหมดอินพุตแบบ canonical เมื่อเชลล์ยอมรับอินพุตแบบโต้ตอบและCtrl+Dในความเป็นจริงเป็นเพียงอักขระธรรมดาและไม่ใช่อักขระพิเศษ EOF Ctrl+Dเชลล์เชื่อมโยงกับแอคชัน GNU Readline หรือ ZLE ที่ออก (แต่เฉพาะถ้าบัฟเฟอร์การแก้ไขบรรทัดว่างเปล่า) ดังนั้นพฤติกรรมส่วนใหญ่จะเป็นผลลัพธ์เดียวกัน แต่Ctrl+Dเป็นไม่ได้ EOF ด้วยเปลือกหอยที่ทันสมัยเพียงตัวละครที่ควบคุมสามัญ พฤติกรรมเมื่อบัฟเฟอร์การแก้ไขไม่ว่างเปล่ามีความแตกต่างอย่างชัดเจนกับสิ่งที่เกิดขึ้นกับตัวอักษรพิเศษ EOF
JdeBP

3
แท้จริงแล้ว Windows NT ที่ใกล้ที่สุดเทียบเท่ากับbashet al กำลังดำเนินการจริง ๆคือชื่อแทนคีย์บอร์ดอัตโนมัติของTCC / LEเช่นอันนี้โดยที่ล่ามคำสั่ง (ไม่ใช่คอนโซล) จะจดจำการกดแป้นพิมพ์สามัญ 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ถูกต้องจริงหรือไม่ ณ เวลานี้?
levant pied

10

AltSpace- จากนั้น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ที่จะต้องกดจึงมีประโยชน์จาก aliasing Ctrl-Z เมื่อเทียบกับเพียงแค่ไม่มีหรือe x
grawity

3

แก้ไขวิธี autohotkey (ฉันไม่สามารถเพิ่มความคิดเห็น)

#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/ ) - ที่จะนำการทำงานของระบบปฏิบัติการยูนิกซ์ ReadLine ไป พรอมต์คำสั่งของ Windows

มันรองรับฟังก์ชั่นส่วนใหญ่รวมถึงการแก้ไขบรรทัดคำสั่งการค้นหาประวัติการเติมแท็บพร้อมกับสคริปต์การทำให้เสร็จสมบูรณ์ ;]


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: ฉันถูกบอกแล้วว่าขึ้นอยู่กับว่าคุณเริ่ม Command Prompt ได้อย่างไรชื่อของหน้าต่างอาจแตกต่างจากที่ฉันใช้ในสคริปต์นี้ บรรทัดที่สองอาจจำเป็นต้องปรับเปลี่ยนตามความต้องการของคุณ
Der Hochstapler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.