Zenn
Open4

bashなら`$ cmd &> /dev/null`で標準出力と標準エラー出力を抑制できるみたい

あいや - aiya000あいや - aiya000
$ echo $0  # bashを使っていることを確認
bash
$ { echo ok ; echo ng > /dev/stderr } &> /dev/null
(出力無し)

もちろんzshでもできる。
shはできない。

おっさんなので、以下の方法しか知らんかった…。

$ { echo ok ; echo ng > /dev/stderr } > /dev/null 2>&1

以下の'Redirecting Standard Output and Standard Error'セクションにマニュアルがあった。

和訳:

原文:

あいや - aiya000あいや - aiya000

ところで、以下の挙動はよくわかんない。

$ { echo ok ; echo ng > /dev/stderr } &> file
(出力無し)
$ cat file
ng

okどこいった?

ko1nksmko1nksm

異なるファイルに書き込んでいるからでしょうね。

&> file はファイルを開き、ファイルディスクリプタの1と2の両方が同じファイルを共有(ファイルポインタは共有)します。

期待した動作になる例
$ { echo ok ; echo ng >&2; } &> file
$ cat file
ok
ng

ファイルが同じでも別々に開いたら、異なるファイル扱い(ファイルポインタは独立)です。

期待した動作にならない例
$ { echo ok ; echo ng >&2; } >file 2>file
$ cat file
ng

つまりファイルディスクリプタ2と、新たに開いた /dev/stderr は別のファイルだということです。

okどこいった?

ngに上書きされました。

あいや - aiya000あいや - aiya000

そういう!!!!!!!
ことか!!!!!!!
笑いました

わかりやすかったです。ありがとうございます!🤣

ログインするとコメントできます