別の例を見てみましょう。 最初のコマンド (ls) は有効なコマンドですが、2 番目のコマンド (ls -0) は不正なオプション -0 が含まれているため無効なコマンドです。

これは有効なコマンドです:

$ ls
Applications Documents Library Music Public$ echo $?
0

次に、無効なコマンドを見てみます:

$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1

このスクリプトで問題となるのは、エラー メッセージが STDERR へ表示されてしまうということです。 しかし、私たちのスクリプトでは、エラーメッセージを表示しないようにしたいのです。

> /dev/null 2>&1 でもう一度試してみましょう:

$ ls -0 > /dev/null 2>&1
$ echo $?
1

今度はエラーメッセージが表示されないことに注意してください。 これを分解すると、ls -0 コマンドのエラー出力 (stderr) を抑制し、標準出力 (stdout) にリダイレクトし、/dev/null に書き込んで、すぐに破棄しているのです。 >&記号は、最初のファイルディスクリプタ(2)の出力をコピーして、2番目のファイルディスクリプタ(1)の出力にリダイレクトする演算子です。

さて、このファイルディスクリプタの表を見て、2>&1の数字が何を表しているかを見ていきましょう。

/dev/nullではなく通常のファイルへの出力で確認できます.

$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls

コメントを残す

メールアドレスが公開されることはありません。