让 为文件com
并fic
在以下 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
。