방금 스크립트 작업을 하고 있었는데 이 줄을 발견했습니다. 누구든지 이 줄이 무엇을 하는지 말해 줄 수 있나요? 이것은 코드 줄입니다.
[ -r "$PosConfigDir/posconfig.sh" ] && . "$PosConfigDir/posconfig.sh"
답변1
심볼릭 링크가 해결된 후 r
파일을 읽을 수 있는 권한이 있는지 확인합니다 .$PosConfigDir/posconfig.sh
원천그 파일.
파일을 읽을 수 있다고 보장하지는 않습니다. 예를 들어 대부분의 시스템에서는 [ -r / ]
true가 반환되지만읽다 /
.
-r
는표준 테스트 연산자.
.
인수로 주어진 파일의 코드를 읽고 해석하도록 쉘에 지시하는 Bourne 유사 쉘의 특수 내장 명령입니다. source
는 의 해당 명령입니다 csh
. 많은 현대 Bourne형 쉘은 source
이것을 .
.
.
일부 셸 구현의 경우 파일을 열거나 읽지 못하면 셸이 중단됩니다(오류 메시지 인쇄 후). 이 -r
점검은 아마도 이러한 일이 발생하는 것을 방지하기 위한 것입니다.
쉘이 중단되는 것을 방지하기 위해 POSIX 쉘에서 대안은 다음과 같습니다.
command . "$PosConfigDir/posconfig.sh"
zsh
sh
(위의 구성은 in 이나 에뮬레이션을 제외하고는 작동하지 않지만 ksh
)
오류 메시지를 방지하려면 stderr 출력을 stderr 로 리디렉션해야 /dev/null
하지만 이는 의 명령에서 오류도 제거하는 원치 않는 부작용이 있습니다 postconfig.sh
.
한 가지 예:
$ [ -r /etc/os-release ] && . /etc/os-release
$ printf '%s\n' "$PRETTY_NAME"
Debian GNU/Linux 8 (jessie)
PRETTY_NAME
/etc/os-release
파일에 정의되어 있습니다:
$ head -n 1 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"