如何抑制文件重定向错误

如何抑制文件重定向错误

如何抑制以下错误

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/ttyreadread

相关内容