.bash_profile에서 운영 체제를 확인하는 방법은 무엇입니까? [복사]

.bash_profile에서 운영 체제를 확인하는 방법은 무엇입니까? [복사]

.bash_profile내 호스트 MacBook Pro에는 Dreamhost Linux 시스템에서 변경 없이 사용하고 싶은 파일이 있습니다 . 그러나 다음과 같이 macOS에서만 작동하는 몇 가지 라인이 있습니다 alias mvim="/Applications/MacVim.app/Contents/MacOS/MacVim".

bash가 macOS 또는 Debian(또는 macOS가 아닌)에서 실행되는지 테스트하고 macOS에서 실행될 때 위의 줄과 몇 가지 다른 줄만 실행할 수 있는 방법이 있습니까? 여기에 있는 다른 질문에는 내가 사용 중인 Linux 배포판을 찾는 방법이 포함되어 있지만 여기서는 macOS에서 실행 중인지 Linux에서 실행 중인지만 알아야 하며 macOS에서 Linux 배포판을 알 수 있는 솔루션은 없습니다.

답변1

OSX에서는 uname -sreturn을 수행합니다 Darwin(대부분의 Linux uname프로그램은 를 반환합니다 Linux).

일반적으로(개인적인 사용은 제외) uname다양한 시스템에는 고유한 특징이 있습니다. 에서는 일관된 정보를 제공하는 autoconf스크립트가 사용됩니다 config.guess.

예를 들어 내 Debian 7에서는

x86_64-pc-linux-gnu

OSX에서엘 캐피탄

x86_64-apple-darwin15.5.0

셸에서 if-then-else 문이나 Case 문을 사용할 수 있습니다. 후자는 유지 관리가 더 쉽습니다.

case $(config.guess) in
*linux*)
    DoSomeLinuxStuff
    ;;
*apple-darwin*)
    DoSomeMacStuff
    ;;
esac

많은 Linux 배포판은 의 출력에 정보를 추가 uname하지만 이는 특정 상황에서만 유용합니다. 가지다아니요추가된 정보의 기준입니다.

내 데비안 7의 경우:

$ uname -v
#1 SMP Debian 3.2.81-1

OSX는 완전히 다릅니다.

$ uname -v
Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64

추가 자료:

답변2

if [[ $(uname -s) == Linux ]]
then
    doThis
else
    doThat
fi

답변3

.bash_profile대체 솔루션으로 휴대용 부분과 시스템별 부분 으로 분할해 볼 수 있습니다 .

기본에 .bash_profile다음을 추가하십시오 .

if [ -f ~/.bash_profile_local ] ; then
    . ~/.bash_profile_local
fi

그런 다음 특정 시스템에만 적용되는 사용자 정의 설정을 .bash_profile_local해당 시스템에 배치합니다. 사용자 정의한 내용이 없으면 이 파일을 만들 필요가 없습니다.

또는 한 단계 더 나아가 일부 시스템 간에 특정 부분을 공유하고 다른 시스템에서는 공유하지 않으려는 경우 완전한 SYSV 스타일 rc.d 디렉터리를 만들 수 있습니다. 존재하다 .bash_profile:

if [ -d ~/.bash_profile.d ] ; then
    for f in ~/.bash_profile.d/* ; do
        if [ -f "$f" ] ; then
            . "$f"
        fi
    done
fi

그런 다음 디렉토리를 생성하면 .bash_profile.d여기에 넣은 모든 파일이 .bash_profile.

관련 정보