bashのバージョンに応じて、shopt -s autocdの.bashrc呼び出しをどのように作成できますか?

bashのバージョンに応じて、shopt -s autocdの.bashrc呼び出しをどのように作成できますか?

Ubuntuで私は好きです

shopt -s autocd

私の.bashrcファイルに「cd」と入力して自動CDを作成します。つまり、ディレクトリ名を入力し(タブ補完機能も利用可能)、Enterキーを押し、そのディレクトリがある場合はcdを押します。

OSXでは、これは私のシステムでは機能しません.bashrc

これに「依存」するにはどうすればよいですか?それでは、2つのオペレーティングシステム間で.bashrcを共有して維持できますか?

私はファイルに対して次のことができることを知っています。

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

tmuxなどの画面依存アプリケーションの場合は、

if [[ ! $TERM =~ screen ]]; then
  if [ -n "$(type -P tmux)" ]; then
    exec tmux
  fi  
fi

しかし、私はこれを行うことができますか?私はできますかshopt -s autocd

答え1

autocdバッシュに導入されましたバージョン4。したがって、ユニバーサルクロスプラットフォームソリューションは次のようになります。

[ "${BASH_VERSINFO[0]}" -ge 4 ] && shopt -s autocd

${BASH_VERSINFO[0]}bashのメジャーバージョンです。必要に応じてマイナーバージョンを使用できます${BASH_VERSINFO[1]}man bash詳しくは参考資料を参照してくださいBASH_VERSINFO

答え2

とても簡単です。

shopt -s autocd 2>/dev/null

値を変更せずにオプションが利用可能であることを確認するには、またはなしshoptで呼び出します。-s-u

if shopt autocd >/dev/null 2>/dev/null; then …

答え3

簡単な方法は、オペレーティングシステムの名前を確認し、それに応じて対処することです。unameOSXで何が返されるかはわかりませんが、おそらく異なります。したがって、次のことができます。

 [[ $(uname) = Linux ]] &&  shopt -s autocd

つまり、この作業を必ず行う必要がありますか? OSXはデフォルトでログインシェルを実行し、それを取得するために~/.bashrc変更しない限り~/.profile無視されます。したがって、その中に何かがある場合は、~/.bashrcとにかくLinux上でのみ実行されます。

関連情報