"."을 사용해도 괜찮습니까? 소스 대신 파일을 실행하려면 - Ubuntu 및 OS X의 .bashrc에서?

"."을 사용해도 괜찮습니까? 소스 대신 파일을 실행하려면 - Ubuntu 및 OS X의 .bashrc에서?

좋습니다. 그러면 에 자세히 설명된 대로 source현재 셸에서 .별도로 스크립트를 실행합니다.". "및 "source "를 사용하여 스크립트 실행예를 들어, 하지만 구체적으로 내 경우에는.bashrc파일에 다음이 있습니다.

[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ -f ~/.git-completion.bash ] && source ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh

이것을 다음으로 대체할 수 있습니까?

[ -f ~/.bash_aliases ] && . ~/.bash_aliases
[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash
[ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh

OS X에서도 작동하나요? 그게 "POSIX" 문제인가요?

source나는 그것을 시도했지만 위의 내용은 여전히 ​​Ubuntu에서 작동하는 것 같습니다 (따라서 실제로 및 둘 다에서 작동합니다 .. 즉, 셸에서 원하는 기능을 제공합니다). 다른 것보다 하나를 선택해야 합니까, 아니면 뭔가 빠졌습니까?

FWIW, OS X에서는 .bashrc.bash_profile.

답변1

에서 bash.source동의어입니다. bash소스 코드인 file 을 살펴보면 동일한 내부 함수를 보고 사용할 수 builtin/source.def있습니다 ..sourcesource_builtin

$BUILTIN source
$FUNCTION source_builtin
$SHORT_DOC source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END

$BUILTIN .
$DOCNAME dot
$FUNCTION source_builtin
$SHORT_DOC . filename [arguments]
Execute commands from a file in the current shell.

하지만 source은 POSIX와 호환되지 않으므로 스크립트가 POSIX로 호출되는 경우 대신 을 /bin/sh사용해야 합니다 . POSIX는 셸을 제한하지 않으므로 위의 모든 스크립트가 작동합니다..source

.개인적 으로 저는 항상 source. (내가 작성한 많은 스크립트는 에서 실행됩니다 cron.)

답변2

이것은POSIX의 정의.dot:

쉘은 현재 환경의 파일에서 명령을 실행합니다.

파일에 가 포함되어 있지 않으면 /<slash>쉘은 지정된 검색 경로를 사용하여 $PATH파일이 포함된 디렉터리를 찾습니다. 그러나 일반 명령 검색과 달리 유틸리티에서 검색한 파일에는 다음이 .dot 필요합니다.~ 아니다실행 가능합니다. 읽을 수 있는 파일이 없으면 비대화형 쉘이 중단됩니다. 대화형 쉘은 표준 오류에 진단 메시지를 기록하지만 이 조건은 구문 오류로 간주되지 않습니다.

[ -f ./file ] && source ./file위의 내용을 고려하여 전체 를 로 교체하는 것이 좋습니다 . ./file. 파일이 없으면 최악의 상황은 로그인 시 알림을 받게 된다는 것입니다. 아마도 이것이 바로 여러분이 갖고 싶은 정보일 것입니다.

물론 테스트를 유지하려면 다음을 수행할 수 있습니다.

test -f ./file && . $_

관련 정보