ฉันกำลังพยายามสร้างสคริปต์การทุบตีเสร็จสิ้นและมีปัญหา
ฉันต้องการตั้งค่าเพื่อให้รายการที่สมบูรณ์เป็นไฟล์ที่ตรงกับส่วนขยายหรือไดเรกทอรี (ซึ่งอาจมีหรือไม่มีไฟล์ของส่วนขยายนั้น)
ปัญหาที่ฉันมีคือวิธีเดียวที่ฉันจะได้รับความสำเร็จในการเก็บไฟล์และไดเรกทอรีคือการใช้สิ่งที่ชอบ-o plusdirs -f -X '!*.txt'
แต่เมื่อฉันปล่อยทุบตีหนึ่งในไดเรกทอรีที่สมบูรณ์มันเพิ่งเพิ่มช่องว่างไปยังจุดสิ้นสุดมากกว่า เฉือน
_xyz()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
#COMPREPLY=( $( compgen -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -f -G '*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o filenames -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o dirnames -f -X '!*.txt' -- $cur ) )
COMPREPLY=( $( compgen -o plusdirs -f -X '!*.txt' -- $cur ) )
return 0
}
complete -F _xyz xyz
ฉันได้ลองบรรทัดที่ถูกคอมเม้นต์ทั้งหมดด้วย แต่พวกเขาไม่ได้ขยายไดเรกทอรี
สำหรับการทดสอบฉันใช้งานไฟล์นี้ในไดเรกทอรีที่มีไฟล์. txt หนึ่งไฟล์และหนึ่งไดเรกทอรี "dir" (ด้วยไฟล์. txt อยู่ข้างในแม้ว่าจะยังไม่สำคัญก็ตาม) การพิมพ์xyz <TAB>
ด้วยฟังก์ชั่นนี้จะแสดงรายการไดเรกทอรีและไฟล์. txt แต่การพิมพ์xyz d<TAB>
จะขยายเป็นxyz dir
(อย่างดีโดยมีช่องว่างหลัง "dir")