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

관련 정보