Tại sao đường dẫn hoàn thành trong bash không phải lúc nào cũng hoạt động?


7

Với các môi trường bash khác nhau (cài đặt khác nhau) tôi có các hành vi khác nhau về mặt hoàn thành đường dẫn khi nhấn TABvào dòng lệnh sau. Điều này được xử lý ở đâu?

Một ví dụ cụ thể:

Tôi chạy cmakevới một -D-argument:

cmake -DCMAKE_TOOLCHAIN_FILE=~/x-too<TAB>

nó không làm gì cả Trong khi đó (chú ý khoảng trống giữa =~

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-too<TAB> 

hoàn thành

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-tools

Trên các hệ thống khác, nó thậm chí hoạt động không có khoảng cách giữa = và ~.

Tôi tìm các tệp cấu hình và giá trị liên quan ở đâu?

Câu trả lời:


4

Linux tự động hoàn thành với complete.

 ]➬complete -p  cmake
 complete -F _cmake cmake

Vì vậy, _cmake phụ trách.

]➬type _cmake > cmake.sh

Và bây giờ chỉ cần xem / gỡ lỗi nó. Bạn sửa đổi trong ví dụ _cmake_mine và gọi để kiểm tra nó:

. cmake.sh
complete -F _cmake_mine cmake

Để nhận trợ giúp cho bất kỳ lệnh bash dựng sẵn nào :

 help complete
 help [[
 help for

không bao giờ biết helplà các mannội dung bash!
wvducky

3

Bạn phải bắt đầu với /etc/profile. Xem những gì các tập tin khác có nguồn gốc từ đó (với .lệnh có thể).

Ví dụ: trên hệ thống Ubuntu của tôi,

  • /etc/profile nguồn tất cả tệp * .sh trong /etc/profile.d/
  • /etc/profile.d/bash_completion.sh nguồn /usr/share/bash-completion/bash_completion
  • tập tin đó:
    • thiết lập chức năng tải hoàn thành nhìn vào /usr/share/bash-completion/completions/
    • và nguồn ~/.bash_completion

Bạn sẽ muốn đi theo con đường đó trên các hệ thống khác nhau của bạn. Có lẽ không có cmaketệp nào trong / usr / share / bash-hoàn thành / hoàn thành / trên một trong số chúng.


Cảm ơn, điều này đã khiến tôi phát điên. Vì một số lý do, điều này không phải lúc nào cũng được thiết lập trong Ubuntu 16.04.
Andres F.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.