ファイルリダイレクトエラーを抑制する方法

ファイルリダイレクトエラーを抑制する方法

次のエラーを抑制する方法

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

関連情報