web-dev-qa-db-ja.com

サポートされていない「ショップ」オプションが.bashrcでエラーを発生させないようにするにはどうすればよいですか?

さまざまなバージョンのBashをさまざまなHPCノード、VM、または個人用ワークステーションで実行している可能性がある、比較的異種の環境で作業しています。私はログインスクリプトをGitリポジトリに配置しているので、「(もしこのホストの場合)」タイプの面倒な作業を行わずに、同じ(ish).bashrcを全面的に使用したいと思います。

私はlikeを押したときにcd $SOMEPATHcd /the/actual/pathに展開するBash≤4.1のデフォルトの動作 Tab キー。 Bash 4.2以降では、この動作を再度有効にするためにshopt -s direxpandを実行する必要があり、thatが利用できなくなりました 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の古いバージョンを擦らずに、Bashでそのオプションを堅牢な方法で有効にすることです>ie、エラー出力を/dev/nullにリダイレクトするだけではありません)。

9
TheDudeAbides

direxpandの出力にshoptが存在するかどうかを確認し、存在する場合は有効にします。

shopt | grep -q '^direxpand\b' && shopt -s direxpand