Tôi làm việc trong một môi trường tương đối không đồng nhất, nơi tôi có thể đang chạy các phiên bản Bash khác nhau trên các nút HPC, VM hoặc máy trạm cá nhân khác. Bởi vì tôi đặt các tập lệnh đăng nhập của mình trong một repo Git, tôi muốn sử dụng cùng (ish) .bashrc
trên bảng, mà không có nhiều "nếu máy chủ này, thì ..." - gõ lộn xộn.
Tôi giống như hành vi mặc định của Bash ≤ 4.1 mà mở rộng cd $SOMEPATH
vào cd /the/actual/path
khi nhấn Tabphím. Trong Bash 4.2 trở lên, bạn sẽ cần phải shopt -s direxpand
kích hoạt lại hành vi này và điều đó không khả dụng cho đến 4.2,29 . Đây chỉ là một ví dụ; một shopt
tùy chọn khác, có thể liên quan , complete_fullquote
(mặc dù tôi không biết chính xác nó làm gì) cũng có thể đã thay đổi hành vi mặc định tại v4.2.
Tuy nhiên, direxpand
không được công nhận bởi các phiên bản trước đó của Bash, và nếu tôi cố gắng shopt -s direxpand
trong tôi .bashrc
, mà kết quả trong một thông báo lỗi được in ra cửa sổ Console mỗi khi tôi đăng nhập vào một nút với một Bash trở lên:
-bash: shopt: direxpand: invalid shell option name
Những gì tôi muốn làm là bao bọc một điều kiện xung quanh shop -s direxpand
để cho phép tùy chọn đó trên Bash> 4.1 một cách mạnh mẽ, mà không làm hỏng các phiên bản cũ hơn của Bash ( nghĩa là không chỉ chuyển hướng đầu ra lỗi sang /dev/null
).
.bashrc
. Tôi vẫn muốn có một bản ghi về cách sử dụng $BASH_VERSINFO
để thẩm vấn phiên bản chính / phụ của shell đang chạy, vì sự chỉnh sửa của riêng tôi, đó là lý do tại sao tôi hoàn thành việc đăng câu trả lời của riêng mình. :)