도트 파일 시스템을 독립적으로 유지하는 방법은 무엇입니까?

도트 파일 시스템을 독립적으로 유지하는 방법은 무엇입니까?

업무상의 이유로 최근 OS X를 사용하기 시작했고 Linux와 같은 경험을 얻기 위해 homebrew를 사용하여 설정했습니다.

그러나 설정에는 약간의 차이가 있습니다. 일부는 하나의 시스템에만 설치하면 됩니다. 내 도트 파일이 git 저장소에 있으므로 특정 구성은 Linux 시스템에서만 읽고 다른 구성은 OS X에서 읽도록 설정할 수 있는 스위치가 무엇인지 궁금합니다.

도트 파일의 경우 .bash_profiles또는 .bash_alias.

답변1

포인트 파일을 가능한 한 이식 가능하게 유지하고 특정 버전의 도구가 필요한 운영 체제 설정이나 스위치에 의존하지 마십시오. 예를 들어 모든 시스템에서 GNU 소프트웨어를 사용하지 않는 경우 GNU 구문을 사용하지 마십시오.

시스템별 설정을 사용해야 하는 상황이 발생할 수 있습니다. 이 경우 별도의 설정이 포함된 switch 문을 사용하세요.

case $(uname) in
  'Linux')   LS_OPTIONS='--color=auto --group-directories-first' ;;
  'FreeBSD') LS_OPTIONS='-Gh -D "%F %H:%M"' ;;
  'Darwin')  LS_OPTIONS='-h' ;;
esac

애플리케이션의 구성 파일에 다른 옵션이 필요한 경우 해당 애플리케이션이 호환성 스위치나 다른 메커니즘을 제공하는지 확인할 수 있습니다. 예를 들어 vim버전 및 패치 수준을 확인하여 이전 버전이나 다른 기능 세트로 컴파일된 버전에서 사용할 수 없는 기능을 지원할 수 있습니다. 예제 스니펫 .vimrc:

if v:version >= 703
  if has("patch769")
    set matchpairs+=“:”
  endif
endif

답변2

uname.bash_profiles 등과 같이 실제로 실행되는 파일에만 관심이 있다면 예를 들어 코드가 실행 중인 시스템에 따라 구별하는 데 사용할 수 있습니다 .

예를 들어, 완전히 테스트되지 않았으며 현재 Linux를 사용하고 있다면 참고할 사항이 있습니다. 시도해 볼 OS X가 없습니다.

alias ll='ls -lFA'

Mac OS X의 경우:

alias ll='ls -lFAx'

( -xOS X가 ls기본적으로 GNU ls가 수행하는 작업을 수행하게 함) 다음과 같이 결합할 수 있습니다.

OS="$(uname -s)"
if test "$OS" = "Darwin"; then
    alias ll='ls -lFAx'
    # ...other OS X-specific things go here...
else if test "$OS" = "Linux"; then
    alias ll='ls -lFA'
    # ...other Linux-specific things go here...
fi
# ...generic things go here...

그런 다음 유일한 요구 사항은 uname -s거의 동일한 방식으로 작업하는 것입니다(두 시스템 모두 합리적으로 POSIX-y이고POSIX에는 uname -s가 필요합니다.(감사해요표시~을 위한이것을 지적하다)), 문자열 비교 기반 쉘 스크립트 분기의 구문은 동일합니다. 또한 다른 기준에 대해 테스트할 수도 있습니다. 예를 들어 /etc/lsb_release를 찾아보고 /proc/sys/kernel/ostype에 "Linux"가 포함되어 있는지 확인하거나 다른 테스트를 수행할 수 있습니다.

관련 정보