Linux

標準エラー出力を標準出力に向けるコマンド

投稿日:2022年2月9日 更新日:

1. 本題

Linux でのターミナル操作において「標準エラー出力へ出力される内容を、標準出力に出力したい」という場合は、以下のようにコマンドを実行します(Bash シェルを想定しています)。

$ command 2>&1

「&」は、「>」の後ろについているというよりは「1」の頭についています。これは「1」がファイル名ではないことを表明するための記法です。

ちなみ、ファイル記述子1は「標準エラー出力」、2は「標準エラー出力」と決まっています。

※ ファイル記述子は、ファイルを参照するための番号です。主にC言語でファイルを扱う場合に使用します。

2. この記述を覚えるための補足

内部的には、dup2 というシステムコールを実行しているようです。

私は システムコールについて詳しくはないのですが、この動作に関して自分の認識している内容を以下に記録しておきます。間違いがあればご指摘ください。

  1. まず、ファイル記述子「1」は標準出力を、ファイル記述子「2」は標準エラー出力を指しています。
  2. dup(1, 2) が実行されます。
  3. これにより、ファイル記述子「1」がファイル記述子「2」に複製されます。もともとあったファイル記述子「2」の方は閉じられます。
  4. 以後、ファイル記述子「1」への書き込みも、ファイル記述子「2」への書き込みも、標準出力への書き込みになります。
ファイル記述子の変化

この動作をコマンドとして見ると、「ファイル記述子 2 がファイル記述子 &1 に リダイレクト (>) している」と捉えることができるので、「2>&1」という記述になる。と理解すればこの記述が覚えやすくなるのではないでしょうか。

📂-Linux

執筆者:labo


comment

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

関連記事

CentOS

CentOS Stream 8 の PHP 7.2 を 7.4 に変更する

CentOS Stream 8 の PHP 7.2 を 7.4 に変更する作業について説明します。

docker

docker run コマンドのパターン覚書

docker run コマンドのパターン覚書です。

Linux

パターンにマッチした行を表示する grep コマンド

目次1. はじめに2. 主な使い方3. その他のオプション4. 正規表現について 1. はじめに grep は、対象ファイルの中で、指定した文字列パターンにマッチした行を表示するコマンドです。 ※ 本 …

CentOS

CentOS Stream release 8 で「Configuration: OptionBinding with id “failovermethod” does not exist」というエラーが表示される

CentOS Stream release 8 で「Configuration: OptionBinding with id “failovermethod” does not exist」というエラーが表示される場合の対応についてです。

Linux

known_hosts ファイル内のハッシュ化されたホスト名(IPアドレス)を自分で算出する

known_hosts ファイル内のハッシュ化されたホスト名(IPアドレス)を自分で算出する方法を紹介します。