แทนที่จะคอยแสดงความคิดเห็น ...
complete -f -X '!*.@(zip|udp)' unzip
ควรเพิ่มความสมบูรณ์ให้
-f -X '!*.@(zip|udp)'
| | | |||________|
| | | || |
| | | || +- filterpat: zip or udp
| | | |+------------- @ : Matches one of the given patterns
| | | +-------------- *. : Anything+<dot>
| | +---------------- ! : Negate
| +------------------- -X : Filter out matches in "filterpat"
+---------------------- -f : files
ในคำอื่น ๆ : ไฟล์ที่สมบูรณ์และลบทั้งหมดที่ไม่สิ้นสุดในหรือ.zip
.udp
พิเศษ
ถ้าคุณเพิ่ม-o default
เสร็จสิ้นจะเสร็จสมบูรณ์ / ตรงกับทุกไฟล์และไดเรกทอรีถ้ามีไม่มีไฟล์ที่ลงท้ายด้วยหรือ.zip
.udp
ถ้าคุณเพิ่ม-o plusdirs
เสร็จจะเพิ่มไดเรกทอรีใดนอกจากเพื่อการแข่งขันของไฟล์ที่ลงท้ายในที่ใด ๆหรือ.zip
.udp
ปัจจุบัน
เมื่อคุณใช้complete -p unzip
คุณจะได้รับรูปแบบปัจจุบัน
จากความคิดเห็นของคุณเสียงส่วนใหญ่ดูเหมือนว่าคุณจะขาดหายไป+
หรือ@
ในรูปแบบเช่นใน:
# Err:
complete -f -X '!*.(zip|udp)' unzip
|
+---- Missing + or @
ซึ่งจะหมายถึงจับคู่ไฟล์ใด ๆ ที่ลงท้าย.(zip|udp)
ด้วย เช่น
touch 'file_test.(zip|udp)'
ดูที่คู่มือในส่วนนี้ด้วย:
มันเป็นไปได้เช่นextglob
ไม่ได้เปิดใช้งาน เปิดใช้งานโดย:
shopt -s extglob
ตรวจสอบสถานะปัจจุบันของshopt
การตั้งค่าทั้งหมดโดยการป้อน:
shopt
ฟังก์ชัน
ถ้านั่น-F something
หมายความว่ามันใช้ฟังก์ชั่นที่ชื่อว่าบางสิ่งเพื่อสร้างรายการความสำเร็จ
_filedir_xspec
โดยปกติจะเป็นฟังก์ชั่นเดเบียน คุณอาจมีสิ่งนี้:
$ cat /etc/bash_completion
. /usr/share/bash-completion/bash_completion
ซึ่งหมายถึง/usr/share/bash-completion/bash_completion
รับที่มา ที่นี่คุณจะได้พบกับฟังก์ชั่นในคำถาม อีกไม่กี่บรรทัดคุณจะเห็นว่าฟังก์ชัน / ความสมบูรณ์นี้ถูกเพิ่มโดยฟังก์ชันที่มีชื่อ_install_xspec
เช่น:
_install_xspec '!*.@(zip|[ejsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|do[ct][xm]|p[op]t[mx]|xl[st][xm])' unzip zipinfo
รายการคู่มือ:
อัปเดตเป็นความคิดเห็น 1:
- ไม่ตรงกันเนื่องจากไฟล์เก็บถาวรหรือการอนุญาตไฟล์ไม่ถูกต้อง
สิ่งนี้ไม่ควรส่งผลกระทบต่อผลลัพธ์ complete
จับคู่ไฟล์ที่กำหนดโดยกฎเท่านั้นและไม่ประมวลผลไฟล์ หากคุณสามารถระบุพวกเขาด้วยls
พวกเขาควรจะจับคู่
ในฐานะที่เป็นหมายเหตุด้านหนึ่งสามารถเพิ่มฟังก์ชั่นดังกล่าวโดยใช้ฟังก์ชั่นสมบูรณ์:
function _unzip_validated() {
# 1. Generate list of files ending in e.g. .zip and .udp
# 2. Validate each file and remove invalid ones from file list.
}
complete -F _unzip_validated unzip
- สี ทำไมไม่ls
เห็นความแตกต่างtest.zip
จากtest.upd
?
complete
นี้ไม่ได้ส่งผลกระทบต่อ สีโดยให้บริการโดยls
$LS_COLORS
ลอง:
echo "$LS_COLORS" | tr : '\n' | sort
คุณควรเห็นสิ่ง*.zip=01;31
ที่หมายถึง:
*.zip=01;31
|____| | |
| | +--- Red
| +------ Bold
+---------- Files with .zip extension
*.udp
ในทางกลับกันไม่มีการเชื่อมโยงกับมันดังนั้นจึงไม่มีการระบายสี
ขั้นตอนถัดไป (ควรเป็นก่อน)
- เปิดเทอร์มินัลแล้วไปที่ไดเรกทอรีพร้อมไฟล์ทดสอบ ทั้ง. zip และ. udp
- เข้าสู่
bash --norc
- เข้าสู่
complete -f -X '!*.@(zip|udp)' unzip
- เข้าสู่
shopt -s extglob
- เข้าสู่
unzip <tab><tab>
ผลลัพธ์?
นอกจากนี้คลิกแก้ไขใต้คำถามของคุณและเพิ่มผลลัพธ์ของ:
bind -V
shopt
env
อาจเป็นประโยชน์
complete -p unzip
อัตราผลตอบแทนcomplete -f -X '!*.@(zip|udp)' unzip
และเสร็จสมบูรณ์ไฟล์ที่ชื่อว่าunzip <tab>
test.zip
อย่างไรก็ตามไดเรกทอรีมีไฟล์ชื่อเช่นกันซึ่งไม่ได้พบได้โดยการเสร็จสิ้นแท็บtest.upd
unzip
ความเป็นจริงของการอนุญาตไฟล์หรือความยาวเป็นศูนย์ของไฟล์อาจจะอธิบายพฤติกรรมแปลก ๆ นี้หรือไม่?