Я працюю у відносно неоднорідному середовищі, де я можу запускати різні версії Bash на різних вузлах HPC, VM або моїй персональній робочій станції. Оскільки я розміщую свої скрипти для входу в Git repo, я хотів би використовувати те саме (ish) .bashrc
по всій дошці, без великої кількості "якщо цей хост, то ..." - безладдя.
Я як поведінка за умовчанням Bash ≤ 4.1, розширюється cd $SOMEPATH
в cd /the/actual/path
при натисканні на Tabклавішу. У Bash 4.2 і вище, вам потрібно буде shopt -s direxpand
повторно включити таку поведінку, і що Герасимчука є до 4.2.29 . Це лише один приклад; інший, можливо, пов'язаний shopt
варіант complete_fullquote
(хоча я не знаю точно, що це робить), можливо, також змінив поведінку за замовчуванням на v4.2.
Однак, direxpand
попередні версії Bash не розпізнаються, і якщо я спробую зробити shopt -s direxpand
свою .bashrc
, це призводить до того, що повідомлення про помилку друкується на консоль кожного разу, коли я входжу у вузол зі старшим Bash:
-bash: shopt: direxpand: invalid shell option name
Що я хотів би зробити, це обернути умовно, shop -s direxpand
щоб увімкнути цю опцію на Bash> 4.1 надійним способом, не розтушовуючи старіші версії Bash ( тобто , не просто перенаправляючи вихідну помилку на /dev/null
).
.bashrc
. Я все ще хотів записати, як використовувати $BASH_VERSINFO
для допиту основної / другорядної версії запущеної оболонки для мого власного називання, саме тому я закінчив публікувати власну відповідь. :)