bashrc は Linux ディストリビューションに応じて別の bashrc を呼び出します。

bashrc は Linux ディストリビューションに応じて別の bashrc を呼び出します。

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

関連情報