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