次のエラーを抑制する方法
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デバイス(ある場合)から1行を読みたいとします。
しかしこれは違う
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
stderrを/dev/null
開く前にリダイレクトし、開いた後に復元します(読み取りエラー(存在する場合)を報告し続けるために)。/dev/tty
read
read