为什么下面的shell序列结束得这么快?

Rev*_*ica 2 tty cat

让是在以下 shell 序列中定义的文件comfic访问权限:

$ 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
$
Run Code Online (Sandbox Code Playgroud)

为什么它在启动echo $x时停止com(在前台)?那不应该读fic吗?

pet*_*rph 5

if tty>/dev/null ; then
    read x
else
    read x<fic
fi
Run Code Online (Sandbox Code Playgroud)

意味着,fic只有在tty返回错误时才会读取。当它发现它stdin不是终端时会发生这种情况。通常,当脚本在管道中或通过 运行它时nohup,或作为 cron 作业运行时,或远程通过ssh -T...

使用[ -t 0 ]的条件是几乎相同的(快,因为[又名test通常是一个内置的这些天)。