좋습니다. 그러면 에 자세히 설명된 대로 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
있습니다 ..
source
source_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 && . $_