![如何抑制文件重定向错误](https://linux22.com/image/174784/%E5%A6%82%E4%BD%95%E6%8A%91%E5%88%B6%E6%96%87%E4%BB%B6%E9%87%8D%E5%AE%9A%E5%90%91%E9%94%99%E8%AF%AF.png)
如何抑制以下错误
if true </dev/tty 2>/dev/null; then
read -r "$VARIABLE" </dev/tty
fi
看来不能忽略这个错误can't open /dev/tty: No such device or address
。这就是整个 if 子句的目的。错误发生在if ...
答案1
首先重定向 stderr:
if true 2>/dev/null </dev/tty; then
IFS= read -r "$VARIABLE" </dev/tty
fi
使用zsh
,您需要:
if { true </dev/tty; } 2> /dev/null; then
IFS= read -r "$VARIABLE" </dev/tty
fi
当重定向失败时,zsh 在输出错误消息之前恢复 fd(这对我来说是有意义的,但这意味着行为不一致,因为重定向外部命令时不会发生恢复)。
假设您想从进程的控制 tty 设备读取一行(如果有的话)。
但这与
IFS= read -r "$VARIABLE" 2> /dev/null </dev/tty
如果无法打开,则不会运行/dev/tty
命令(此处)。read
你也可以这样做:
{ IFS= read -r "$VARIABLE" < /dev/tty 2>&3 3>&-; } 3>&2 2> /dev/null
对于要重定向到打开/dev/null
之前的stderr,并在打开之后恢复(为了仍然能够报告读取错误(如果有))。/dev/tty
read
read