Open4
bashなら`$ cmd &> /dev/null`で標準出力と標準エラー出力を抑制できるみたい
$ 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'セクションにマニュアルがあった。
和訳:
原文:
ところで、以下の挙動はよくわかんない。
$ { echo ok ; echo ng > /dev/stderr } &> file
(出力無し)
$ cat file
ng
okどこいった?

異なるファイルに書き込んでいるからでしょうね。
&> 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に上書きされました。
そういう!!!!!!!
ことか!!!!!!!
笑いました
わかりやすかったです。ありがとうございます!🤣
ログインするとコメントできます