シェル ファイルディスクリプタ 「2>&1」

普段何気に利用しているリダイレクションにはファイルディスクリプタ番号が隠れています。

例えば(hogeファイルは存在するものとします。)

cat hogeの標準出力をfileへ書き出すというコマンド。

実は上記書き方はファイルディスクリプタ番号が省略されていて

ディスクリプタ番号付きで書くと

となります。

動作的には、cat hoge > fileと同じです。

ファイルディスクリプタ番号の意味は以下のとおり。

ファイルディスクリプタ 意味
0 標準入力
1 標準出力
2 標準エラー

これらを活用すると、

標準エラーのみファイルに書き出すとか、

標準出力と標準エラーを同一ファイルに書き出すといった事ができます。

標準エラーのみファイルに書き出すには、

hogeファイルの内容は画面(標準出力)に出力されますが、

hogehogeファイルは存在しないためエラーの旨がfileに書き出されます。

標準出力と標準エラーを同一ファイルに書き出すには、

上記2つのコマンドはどちらも同じ動作をします。

ファイルディスクリプタ番号が省略されているか否かの違いです。

hogeファイルの内容はfileに書き出されます。

hogehogeファイルは存在しないためエラーの旨がfileに書き出されます。

よく見かけると思いますが、

2>&1

は、ファイルディスクリプタ2番を1番にまとめるという意味。

つまり標準エラー標準出力にまとめるということです。

これらのコマンドを実際に打って

画面表示(標準出力)とfileの内容を確認するとすぐ理解できると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です