Saya mencoba menyiapkan skrip penyelesaian bash dan mengalami masalah.
Saya ingin mengaturnya sehingga penyelesaian yang tercantum adalah file yang cocok dengan ekstensi tertentu, atau direktori (yang mungkin atau mungkin tidak mengandung file dari ekstensi itu).
Masalah yang saya alami adalah bahwa satu-satunya cara saya bisa mendapatkan penyelesaian untuk berisi file dan direktori adalah dengan menggunakan sesuatu seperti -o plusdirs -f -X '!*.txt'
, tetapi ketika saya membiarkan bash menyelesaikan salah satu direktori, itu hanya menambah ruang pada akhirnya, daripada sebuah memotong.
_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
Saya sudah mencoba semua baris komentar juga, tetapi mereka bahkan tidak memperluas direktori.
Untuk pengujian, saya sudah menjalankan ini dalam direktori dengan satu file .txt dan satu direktori "dir" (dengan file .txt di dalamnya, meskipun itu belum masalah). Mengetik xyz <TAB>
dengan fungsi ini mencantumkan direktori dan file .txt, tetapi mengetik xyz d<TAB>
diperluas ke xyz dir
(well, dengan spasi setelah "dir").
Saya pikir solusi sederhana ini berfungsi di dalamnya:
.txt
Kunci itu lewat
-o filenames
untuk menyelesaikan. Ini diuji pada GNU bash 3.2.25 pada RHEL 5.3 dan GNU bash 4.3.18 pada osxsumber