Я работаю в относительно гетерогенной среде, где я могу использовать разные версии Bash на разных узлах HPC, виртуальных машинах или моей личной рабочей станции. Поскольку я помещаю свои сценарии входа в Git-репозиторий, я хотел бы использовать один и тот же (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
для опроса основную / младшую версию работающей оболочки, для моего собственного назидания, поэтому я закончил публиковать свой собственный ответ. :)