"."을 사용해도 되나요? Ubuntu 및 OS X의 .bashrc에서 소스 코드 대신 파일을 실행하시겠습니까?

"."을 사용해도 되나요? Ubuntu 및 OS X의 .bashrc에서 소스 코드 대신 파일을 실행하시겠습니까?

좋습니다. 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" 문제입니까?

나는 그것을 시도해 보았고 위의 내용은 여전히 ​​Ubuntu에서 작동하는 것 같습니다 (따라서 그들은 실제로 and 와 함께 작동합니다 source. .즉, 쉘에서 필요한 기능을 제공합니다). 이 중 하나를 선택해야 합니까, 아니면 뭔가 빠졌습니까?

.bashrcFWIW , OS X에서 .bash_profile.

답변1

에서 bash.source동의어입니다. bash소스 코드 파일을 보면 동일한 내부 함수를 보고 사용할 수 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.

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

개인적으로 저는 항상 . .대신에 .를 사용합니다 source(제가 작성한 많은 스크립트는 .에서 실행됩니다 cron).

답변2

이것은POSIX 정의.dot:

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

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

[ -f ./file ] && source ./file위의 사항을 고려하여 완전히 교체하는 것이 좋습니다 . ./file. 파일이 존재하지 않는 경우 최악의 시나리오는 로그인할 때 알림을 받게 되는 것입니다. 제 생각에는 이것이 아마도 귀하가 원하는 정보일 것입니다.

물론, 테스트를 유지하려면 다음과 같이 할 수 있습니다.

test -f ./file && . $_

관련 정보