วิธีการขยาย * บนบรรทัดคำสั่ง Bash


34

ผมเข้าใจว่าถ้าคุณพิมพ์ls *มันจะขยายตัวจริงls a b cเมื่อปัจจุบันโดยตรงมีแฟ้มa, และbc

ฉันสงสัยว่าถ้ามีวิธีขยายนี้ก่อนที่ฉันจะกด Enter คล้ายกับวิธีการทำงานของCtrl + Xหรือการทำงานของแท็บให้สมบูรณ์

ดังนั้นเพื่อให้ตัวเองชัดเจน

$ ls *
<press magic key>
$ ls a b c

ในทำนองเดียวกันกับ:

$ ls ~/
<press tab>
$ ls /home/username

ฉันคิดว่าฉันเคยเห็นสิ่งนี้มาก่อน แต่ฉันอาจเข้าใจผิด


ฉันรู้น้อยมาก แต่สิ่งที่ดีที่สุดที่ฉันรู้คือ $ echo * <ENTER> คุณสามารถทำได้ก่อนคำสั่ง ls * ไม่ได้เป็นการกดปุ่มแท็บหรือทางลัดเพื่อขยาย
barlop

แต่บางทีผู้ใช้ linux จะไม่ทำอะไรเหมือน ls * มาก 'มันอาจไม่จำเป็นต้องใช้ ls แต่ยังทำให้เกิดลักษณะที่แตกต่างบนเชลล์ที่แตกต่างกันดังนั้นมันจึงไม่ใช่พกพา แต่เมื่อสะดวกแล้วก็ใช้ได้ แต่ในกรณีของ ls ไม่จำเป็น ls * / แสดงรายการไดเร็กตอรี่ แต่ไม่มากที่ ls ถูกออกแบบมาให้ทำ
barlop

คำตอบ:


19

คุณสามารถใช้glob-expand-wordฟังก์ชั่นจากมนุษย์bash:

คำก่อนจุดถือเป็นรูปแบบสำหรับชื่อพา ธ
ส่วนขยายและใส่ชื่อไฟล์ที่ตรงกัน
แทนที่คำ หากมีการให้อาร์กิวเมนต์ที่เป็นตัวเลข
เครื่องหมายดอกจันถูกต่อท้ายก่อนการขยายชื่อพา ธ

เพิ่มสิ่งนี้ในของคุณ~/.inputrc:

Control-x: glob-expand-word

ดังนั้น$ ls *ตามมาด้วยCtrl-Xจะขยายไป$ ls a b cในตัวอย่างของคุณ


8
มันควรจะถูกผูกไว้แล้ว และ Ctrl-x นั้นถูกผูกไว้เป็นคำนำหน้าของสิ่งต่างๆ สนใจbind -p | grep 'C-x'ไปดูกัน
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

นั่นคือสิ่งที่ฉันกำลังมองหา! ขอบคุณ
bramp

@Dennis มันไม่ได้ถูกผูกไว้ แต่เพิ่มลงใน. inputrc ของฉันได้ ฉันเดาว่าเป็นค่าเริ่มต้นของ Debian
bramp

3
@Dennis: มันถูกผูกไว้C-x*กับระบบของฉัน
cYrus


11

เมื่อคุณอยู่ในviโหมด ( set -o vi) "กุญแจวิเศษ" Esc*เป็น งานนี้มีทั้งและbashksh


เพื่อให้ชัดเจนกับ vimmers ก่อนอื่นให้พิมพ์เครื่องหมายดอกจันในขณะที่พิมพ์บรรทัดคำสั่งตามปกติจากนั้นออกจากโหมดแก้ไขเคอร์เซอร์จะค้นหาตำแหน่งบนเครื่องหมายดอกจันหากคุณหนีออกมาทันทีจากนั้นกดดอกจันด้วยเคอร์เซอร์ที่อยู่บนเครื่องหมายดอกจันและ glob ขยายและปล่อยคุณในโหมดแก้ไขอีกครั้ง
NeilG

4
$ bind -q glob-expand-word
glob-expand-word สามารถเรียกใช้ผ่าน "\ Cx *"

$ bind -q insert-completions
การแทรกสำเร็จสามารถเรียกใช้ผ่าน "\ e *"

ดังนั้นในการใช้สิ่งเหล่านี้เราสามารถทำได้

ls * Ctrl+x *

หรือ

ls * Esc *

ขยายบรรทัดที่ซับซ้อนก่อนกดปุ่ม Enter


นี่คือคำตอบที่ดีที่สุดเพราะค้นหาการโยงคีย์ที่แน่นอนซึ่งอาจแตกต่างกันในสภาพแวดล้อมที่แตกต่างกัน
wisbucky

0

ทางเลือกสำหรับ glob-expand-word (\ Cx *) คือการแทรกการเติม (\ e *) มันทำงานได้โดยไม่ต้องใส่เครื่องหมายดอกจันในตอนท้าย แต่ก็ยังมีความสำเร็จอื่น ๆ เช่นไฟล์ที่ซ่อนอยู่ ฉันได้ดีดตัวขึ้นทั้งใน ~ / .inputrc:

# insert glob results (\C-x* by default)
"\C-g": glob-expand-word

# insert completion list (\e* by default)
"\ei": insert-completions

glob-complete-word (\ eg) สามารถใช้เพื่อแปลง/System/Library/Launch*/*Finderให้/System/Library/LaunchAgents/com.apple.Finder.plistเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.