Tôi cần tên thư mục trong / mailman / list để hoàn thành tab dưới dạng đối số (không có dấu gạch chéo) cho lệnh 'list_members' bất kể tôi đang ở đâu trong hệ thống tệp.
Trong tcsh (trên máy chủ cũ của chúng tôi), tôi đã viết một dòng để làm những gì tôi cần:
complete list_members 'p,*,F:/mailman/lists,,' #tcsh
việc thực hiện của bash dường như phức tạp hơn. Làm thế nào tôi có thể thực hiện hành vi tương tự bằng cách sử dụng bash?
Việc hoàn thành tab cần phải nhạy cảm theo ngữ cảnh để bất kỳ phần nào của đối số tôi đã nhập sẽ thu hẹp tìm kiếm, giống như hoàn thành bash tiêu chuẩn. Thí dụ:
list_members sys<TAB> #only shows names beginning with sys
Tôi đã thử một vài giải pháp sau khi xem các ví dụ, nhưng chúng không hoạt động đúng.
Một ví dụ thất bại:
function _listlists()
{
COMPREPLY=( $( compgen -C 'ls /mailman/lists' ) )
}
complete -F _listlists list_members
Điều này dẫn đến lỗi:
-bash: compgen: warning: -C option may not work as you expect
Một ví dụ thất bại khác:
function _listlists()
{
cd /mailman/lists
COMPREPLY=( $( compgen -d ) )
cd -
}
complete -F _listlists list_members
Điều này cho thấy tất cả các kết quả từ thư mục đó được chuyển thành 'thêm', nhưng nó không đáp ứng với đối số một phần mà tôi đã nhập.
Cảm ơn.