Ẩn một số lệnh từ hoàn thành bash?


9

Trong bash, giả sử tôi có các lệnh sau:

$ pyt[TAB][TAB]
pytest
python
python-config
python-dbg

99% thời gian, tôi sẽ đi python. Thật khó chịu khi pytestbật lên và ngăn tôi gõ chỉ pyt[TAB][RETURN]để gọi python. Tôi có thể ẩn để pytesthoàn thành bash không?

Những hạn chế của tôi:

  1. Tôi biết rằng tôi có thể xóa pytestnhị phân tại /usr/bin/pytestđể ngăn đề xuất đó trong bash. Nhưng nếu tôi không có quyền truy cập root thì sao? Điều gì xảy ra nếu pytestmột tập lệnh quan trọng phải tồn tại để cho các tập lệnh khác hoạt động đúng?

  2. Mặc dù tôi có thể loại bỏ pytestnhị phân (và tôi đã thực hiện nó trước đây), một lúc nào đó khi tôi nâng cấp phần mềm của mình, tập lệnh này lại quay trở lại.

  3. Tôi biết rằng tôi có thể sử dụng một aliasđể lưu tổ hợp phím cho các ứng dụng yêu thích của mình (có thể chỉ pdành cho python). Nhưng tôi không thích những chữ viết tắt không chuẩn này. Nó làm cho tôi bối rối khi tôi từ xa đến các máy khác.

Vì vậy, có cách nào để ẩn một số lệnh từ hoàn thành bash? Câu trả lời trong các shell khác (zsh, fish, v.v.) được chào đón vì bash không tăng tốc công việc của tôi gần đây.

Câu trả lời:


13

Điều này khá mới, nhưng trong Bash 4.4, bạn có thể đặt EXECIGNOREbiến:

aa Biến mới: EXECIGNORE; một danh sách các mẫu riêng biệt sẽ khiến các tên tệp phù hợp bị bỏ qua khi tìm kiếm các lệnh.

Từ tài liệu chính thức :

NGOẠI GIAO

Một danh sách các mẫu vỏ được phân tách bằng dấu hai chấm (xem Ghép mẫu ) xác định danh sách tên tệp sẽ bị bỏ qua bởi tìm kiếm lệnh bằng cách sử dụng PATH. Các tệp có tên đường dẫn đầy đủ khớp với một trong các mẫu này không được coi là tệp thực thi cho mục đích hoàn thành và thực thi lệnh thông qua tra cứu PATH. Điều này không ảnh hưởng đến hành vi của các lệnh [, test và [[. Tên đường dẫn đầy đủ trong bảng băm lệnh không phải tuân theo EXECIGNORE. Sử dụng biến này để bỏ qua các tệp thư viện dùng chung có tập bit thực thi, nhưng không phải là tệp thực thi. Mẫu phù hợp sẽ tôn vinh cài đặt của tùy chọn shell extglob.

Ví dụ:

$ EXECIGNORE=$(which pytest)

Hoặc sử dụng Kết hợp mẫu :

$ EXECIGNORE=*/pytest

Làm việc như một cơ duyên!
neizod

Xem thêm vào đường dẫn để thảo luận liên quan về việc gắn vào biến hệ thống và cách làm cho nội dung biến vẫn tồn tại khi khởi động lại.
Enharmonic
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.