좋습니다. 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
. .
즉, 쉘에서 필요한 기능을 제공합니다). 이 중 하나를 선택해야 합니까, 아니면 뭔가 빠졌습니까?
.bashrc
FWIW , OS X에서 .bash_profile
.
답변1
에서 bash
및 .
은 source
동의어입니다. bash
소스 코드 파일을 보면 동일한 내부 함수를 보고 사용할 수 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 && . $_