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

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

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

$ 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不是终端时就会发生这种情况。通常,当脚本位于管道中或通过nohup或作为 cron 作业运行它时,或通过远程运行时,会发生这种情况ssh -T

使用[ -t 0 ]as 条件几乎是相同的(而且速度更快,因为现在[aka通常是内置的)。test

答案2

com shell 脚本在前台执行时,会在线停止:read $x,因为它正在等待read实际tty.

如果您键入一行,read将会终止并将该行设置为变量x

相关内容