web-dev-qa-db-ja.com

shopt -s autocdへの.bashrc呼び出しをbashバージョンに依存させるにはどうすればよいですか?

Ubuntuでは私は持っているのが好きです

shopt -s autocd

.bashrcファイルで「cd」と入力して自動CDを作成します。つまり、ディレクトリ名を入力し(おそらくタブ補完も使用します)、Returnキーを押して、ディレクトリが存在する場合はそのディレクトリにcdします。

OSXでは、これは私の.bashrcでは無効です。

これに対して「依存」を行うにはどうすればよいですか? 2つのOS間で.bashrcを1つだけ共有して維持できるようにするには?

私はファイルについて次のようなことができることを知っています:

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を実行できるかどうかについて、このようなことを実行できますか?

6
Michael Durrant

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

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

${BASH_VERSINFO[0]}はbashのメジャーバージョンです。マイナーバージョンは、必要になった場合に備えて、${BASH_VERSINFO[1]}。見る man bash詳細についてはBASH_VERSINFO

3
John1024

それは同じくらい簡単です

shopt -s autocd 2>/dev/null

オプションが使用可能かどうかを確認したいが、その値を変更したくない場合は、-sまたは-uなしでshoptを呼び出します。

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

簡単なアプローチは、OS名を確認し、それに応じて行動することです。 OSXでunameが何を返すかはわかりませんが、おそらく異なるでしょう。したがって、次のようなことができます。

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

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

0
terdon