다음 쉘 시퀀스가 ​​왜 그렇게 빨리 끝나나요?

다음 쉘 시퀀스가 ​​왜 그렇게 빨리 끝나나요?

파일을 만들고 다음 셸 순서로 액세스 권한을 정의합니다 com.fic

$ cat com
if tty>/dev/null
    then read x
    else read x<fic
fi
echo $x
$ cat fic
abcd
$ ls -l com fic
-r-xr-xr-x  1 jmr    ens    70 Jan 22 09:41 com
-r--r--r--  1 jmr    ens    5 Jan 22 09:41 fic
$

echo $x시작 시(포그라운드에서) 중지되는 이유는 무엇입니까 ? 읽어야 하는 것 com아닌가 fic?

답변1

if tty>/dev/null ; then
    read x
else
    read x<fic
fi

즉, fic오류가 반환된 경우에만 읽혀집니다. tty이는 터미널이 아니라는 것을 발견했을 때 stdin발생합니다 . 일반적으로 이는 스크립트가 파이프라인에 있거나 nohupcron 작업을 통해 또는 원격으로 실행될 때 발생합니다 ssh -T.

조건부로 사용하는 것은 [ -t 0 ]거의 동일합니다( [현재 aka가 일반적으로 내장되어 있으므로 더 빠릅니다).test

답변2

com 셸 스크립트가 포그라운드에서 실행되면 read실제 tty.

행을 입력하면 read해당 행이 종료되고 해당 행이 변수로 설정됩니다 x.

관련 정보