nvm을 통해 노드를 설치할 때 .profile 파일에서 다음 명령을 찾았습니다.
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[]
다음 명령에서 중화의 목적이 무엇인지 알고 싶습니다 .&&
이전에 이 명령 구문을 접한 적이 없습니다. 다음 명령의 기능과 이 구문의 이름을 알고 싶습니다. 내 생각에는 소프트 링크를 생성하는 것 같습니다. 맞나요?
편집하다:nvm.sh는 실행 파일이 아닙니다.
답변1
[
테스트 구조는 다음과 같습니다 .
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
이는 -s
사용 가능한 테스트 중 하나이며 파일이 존재하고 비어 있지 않으면 true를 반환합니다.
$ help test | grep -- -s
-s FILE True if file exists and is not empty.
&&
AND 이다운영자. 오른쪽 명령은 왼쪽 명령이 성공한 경우에만 실행됩니다.
마지막으로 이 .
명령은 source
동일한 셸 세션 내의 소스 파일에 있는 모든 코드를 평가하도록 셸에 지시합니다.
$ help .
.: . 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.
따라서 실행한 명령은 다음과 같습니다.
## If the file exists and is not empty
if [ -s "$NVM_DIR/nvm.sh" ]; then
## Source it
. "$NVM_DIR/nvm.sh"
fi
답변2
cmd1 && cmd2
cmd1이 성공하는 경우에만 cmd2를 실행하십시오. cmd1 && cmd2
AND가 모두 성공하면 성공한다는 것이 "AND" 연산자의 개념 cmd1
입니다 .cmd2
여기서 cmd1은 [
명령(테스트를 실행하는 데 사용됨)이고 cmd2는 명령 .
(주어진 파일에 포함된 코드를 평가하도록 쉘에 지시하는 데 사용됨)입니다.
이 [
명령은 파일 크기가 0이 아닌지 -s file
확인합니다 file
(그렇다면 성공을 반환합니다).
따라서 명령줄의 의미는 다음과 같습니다.$NVM_DIR/nvm.sh
파일이 비어 있지 않으면 파일의 코드를 해석하십시오..
비어 있으면 .
명령이 아무 작업도 수행하지 않으므로 문제가 없습니다. 이 테스트는 [
명령도 반환하므로 여전히 유용합니다.잘못된파일이 존재하지 않는 경우. Bourne과 유사한 셸( bash
POSIX 적합성 모드가 아닌 경우)에서 그렇게 하면 . a-file-that-does-not-exist
셸이 종료됩니다(심지어 bash
오류 메시지가 표시될 수도 있음).
따라서 파일이 존재한다는 보장이 없다면(없어도 상관없습니다) 미리 파일을 확인해 보는 것이 좋으며, 이것도 [ -s file ]
하나의 방법입니다. .
또한 파일이 비어 있으면 명령을 건너뛸 수 있다는 장점도 있습니다.
이것도 [ -s file ]
반환됩니다.진짜/성공file
비어 있지 않고 일반 파일(예: 디렉터리)이 아닌 경우 에도 명령이 .
실패하게 됩니다. 또 다른 접근 방식은 [ -f file ]
테스트가 존재하는 것일 수 있습니다.file
일반 파일입니다(또는 일반 파일에 대한 심볼릭 링크). 이는 비전통적인 파일(예: fifo)을 더 이상 사용할 수 없으며 파일이 디렉터리인 경우 오류 메시지를 출력하는 것이 더 낫다고 주장할 수 있음을 의미하지만, 이는 분명히 하나의 병리학적 사례이기 때문입니다.
또 다른 방법은 [ -r file ]
파일이 존재하고 읽을 수 있는지 확인하는 것입니다. 그러나 그렇지 않은 경우 문제가 무엇인지 알려주는 오류 메시지를 선호할 수도 있습니다.
[ -e file ]
또한 파일이 존재하는지(비어 있는지, 일반인지, 읽을 수 있는지 또는 존재하지 않는지) 확인하는 작업만 수행됩니다 .