如何抑制以下错误
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