bashrcファイルを読み取り、使用するソフトウェアの一部をロードするシステムにログインします。
ログインしたLinuxシステムに基づいて指定されたbashrcファイルをロードしたいと思います。
特に、centOS 6システムにログインするとcentos6 bashrcをロードしようとします。
cat /etc/*-release
CentOS release 6.4 (Final)
LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
CentOS release 6.4 (Final)
CentOS release 6.4 (Final)
centOS 5.7システムにログインしたら、centOS 5.7 bashrcをロードしたいと思います。
cat /etc/*-release
CentOS release 5.7 (Final)
私のホームディレクトリに3つのbashrcファイルを置くことを検討しています。
.bashrcにはif条件が含まれているので、centOS6にログインしていることがわかったときに実行されます。
source ~/.bashrc.centos6
centOS5.7にログインすると実行されるelseもあります。
source ~/.bashrc.centos5
だから私の.bashrcコードは次のようになりたいです。
if cat /etc/*-release == "CentOs release 6.4"
source ~/.bashrc.centos6
elif cat /etc/*-release == "CentOs release 5.7"
source ~/.bashrc.centos5
私はbashスクリプトに最初に触れたので、これを行う方法か、それが私の目標を達成するための最良の方法であるかわかりません。
答え1
次のコマンドを使用しますlsb_release
(しなければならないほとんどのディストリビューションでは、デフォルトで:
shopt -s nocasematch
if [ -x "$(which lsb_release)" ]; then
case "$(lsb_release -si)" in
*centos*)
case "$(lsb_release -sr)" in
5.7*)
source ~/.bashrc.centos5.7
;;
5*)
# source something for any other version 5 minor release
;;
6*)
source ~/.bashrc.centos6
;;
esac
;;
esac
fi
shopt -u nocasematch
lsb_release -si
との正確な出力によって異なりますlsb_release -sr
。必要に応じてケースを追加できます。
答え2
${parameter+substitution}
最終的にパラメータについて話しているので、これは完璧なユースケースです。
_src_release() {
. ${RELEASE:=/path/to/fallback}
} <<GET_RELEASE
${PREFERRED="$(whatever gets you /path/to/preferred)"}
${NEXT_BEST="$(something else gets you /path/to/next/best)"}
${IF_YOU_MUST="$(get /the/third/option)"}
${RELEASE="${PREFERRED:-"${NEXT_BEST:-"${IF_YOU_MUST}"}"}"}
GET_RELEASE
コマンドオーバーライドのforループですべてのロジックを実行し、結果を取得した$RELEASE
ときに再エコーすることもできます。ここで重要なのは、変数を正しく使用すると、それ自体の値をテストできることです。
したがって、.dot
ソース操作を実行するときに$RELEASE
入力に設定されたすべての変数がNULL
その値以外の値で埋められない場合. /path/to/fallback.
必要に応じて操作を実行でき、|| short-circuit
上記のシェルステートメントに従って.dot
エラーをテストして処理します。使い方は本当に簡単です。そうすれば、どのように見え、意味するのかがわかります。
これを実行したいが.profile,
最善の方法は、ログインしたい各ディストリビューションに対して特定のディストリビューションにのみ適用される特別なリンクを作成するか、/etc/login.defs
ラッパー$ENV_PATH
のシェル実行可能ファイルを具体的に設定することです。あなたはスクリプトが欲しいです。このように、実際には、破壊可能なプロファイルスクリプトではなくログインデーモンによって処理されます。/etc/passwd.
$PATH