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
を実行できるかどうかについて、このようなことを実行できますか?
autocd
がbashに導入されました バージョン4で 。したがって、一般的なクロスプラットフォームソリューションは次のようになります。
[ "${BASH_VERSINFO[0]}" -ge 4 ] && shopt -s autocd
${BASH_VERSINFO[0]}
はbashのメジャーバージョンです。マイナーバージョンは、必要になった場合に備えて、${BASH_VERSINFO[1]}
。見る man bash
詳細についてはBASH_VERSINFO
。
それは同じくらい簡単です
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でのみ実行されます。