'.'과의 차이점은 무엇인가요? 그리고 쉘의 "소스"는 무엇입니까? [복사]

'.'과의 차이점은 무엇인가요? 그리고 쉘의 "소스"는 무엇입니까? [복사]

중복 가능성:
"." 및 "소스"로 실행

나는 주어진 rc 파일을 다시 로드하기 위해 도트 명령 "."과 'source'를 사용했지만(보통 환경 변수를 업데이트하기 위해) 이것이 다르고 선호되는지 잘 모르겠습니다. 둘 사이의 차이점은 무엇입니까?

답변1

.Bourne 및 POSIX 쉘 명령 source이지만 C-Shell 명령입니다.

bash및 와 같은 일부 Bourne-shell 파생물 zsh의 대부분 구현에는 일반적으로 별칭인 명령이 ksh있습니다 . 그러나 약간 다르게 동작할 수 있습니다(예: zsh 및 ksh에서).source.

bash의 경우 동일하게 동작하지만 POSIX 모드에서 실행되는지 여부에 따라 동작이 영향을 받습니다 ..source

POSIX에서는 .제공된 $PATH경로에 /.

csh's는 source인수를 경로로 해석하고 그 안에 있는 파일을 찾지 않습니다 $PATH.

bash는 POSIX 모드에서 POSIX가 요구하는 대로 작동하고 .POSIX 가 아닌 모드에서 pdksh가 요구하는 대로 작동합니다. 즉, 읽기 위해 파일을 열 수 없고(동일하게) 파일을 찾을 수 없는 경우 스크립트를 종료하지 않습니다.sourcesourcecommand .$PATH 및 현재 디렉토리제공된 경로에 /.

zsh는 현재 디렉토리를 검색하는 .동안 POSIX 요구 사항에 따라 작동합니다.source첫 번째그런 다음 $PATH(시뮬레이션에서도 csh) 매개변수가 포함되지 않은 경우 /(참조)info zsh .그리고info zsh source더 알아보기). 쉘은 파일을 찾 .거나 source열지 못하는 경우 shPOSIX 모드(에뮬레이션)에서만 중단됩니다 .

AT&T ksh source도 쉘을 종료하지만 현재 디렉토리에서 파일을 찾지 않습니다.

전체적으로 Bourne과 유사한 쉘(내장 Bourne 쉘 없이는 아니지만 command)에서 일관된 동작을 원한다면 다음을 수행할 수 있습니다.

command . /path/to/the-file-to-source || handle-error

그리고 만약에파일을 소스로현재 디렉토리에 있어야 합니다. 다음을 작성하십시오.

command . ./the-file-to-source || handle-error

POSIX가 사용되는 sh스크립트 에서는 위에서 설명한 POSIX 동작을 사용할 수 있어야 합니다.shsh


1 호출 시 POSIX 모드를 활성화 zsh합니다 . 의 경우 해당 환경에서 수신된 경우 (bash 명령으로 호출된 경우, POSIX 명령이 호출되지 않은 경우라도 ), 수신된 경우 또는 로 또는 이후에 호출된 경우입니다 . zsh를 사용하면 사용할 수 있습니다bashshbashPOSIXLY_CORRECTbashSHELLOPTS=posixbash --posixbash -o posixset -o posixemulate sh시뮬레이션 sh. 시뮬레이션은 zsh의 동작을 변경하는 여러 옵션을 변경합니다. 이 경우 옵션은 입니다 POSIX_BUILTINS.

Bash에서는 (POSIX가 아닌) 명령을 사용하여 POSIX 모드에 있는지 확인할 수 있습니다 [ -o posix ]. zsh에서는 출력을 확인 emulate하여 가장하고 있는지 확인 sh하거나 [[ -o posixbuiltins ]]해당 특정 옵션이 활성화되어 있는지 확인할 수 있습니다. 특정 에뮬레이션 모드를 일시적으로 활성화할 수도 있습니다 emulate -L(현재 버전에 있음).현지의범위만).

² 비대화형 쉘에 적용 가능합니다. 대화형 셸의 경우 서로 다른 셸이 다르게 동작하며 일부는 실패를 무시하고 일부는 일부 구문 오류와 함께 프롬프트를 반환합니다. 또한 서브셸에서 실행하는 경우 서브셸만 종료됩니다.

답변2

source가독성과 자체 문서화를 위해 존재하며, .빠른 타이핑을 위해 존재합니다. 명령은 동일합니다. 같은 이유로 Perl의 많은 제어 변수에는 긴 버전과 짧은 버전이 있습니다.

관련 정보