Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
30
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

標準出力と標準エラー出力とパイプとリダイレクションまとめ(2016年9月9日現在実に怪しい)

標準出力と標準エラー出力へ文字を出すだけの実験プログラム.

a.c
#include <stdio.h>
int main(int argc, char *argv[])
{
  fprintf(stdout, "1\n");
  fprintf(stderr, "2\n");
  return 0;
}

以下を試してみた.

./a                         # 1 2 と表示される (実態は 2 は標準エラー出力)
./a > b.txt                 # 2 と表示され 1 は b.txt へ
./a >& b.txt                # 2 1 と b.txt へ出力される
./a 2>&1 > b.txt            # 2 と表示され 1 は b.txt へ (実態は 2 は標準出力)
./a | less                  # less で 1 が見られ 2 は標準エラー出力で見られる
./a |& less                 # less で 2 1 が見られる
./a >& /dev/null | less     # less で 1 が見られる (2 は捨てられる) ※これが理解不能
./a 2>&1 > /dev/null | less # less で 2 が見られる (1 は捨てられる) (2016年9月9日追記 これが再現しません…どういうことなの…)
./a 2> /dev/null | less     # less で 1 が見られる (2 は捨てられる)

>& が割と謎い…

参考 :
http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
http://cns-guide.sfc.keio.ac.jp/2004/2/4/14.html

(追記) 上記の結果,あまりあてにしないで下さい.過去のものです.

私が本当に必要だったもの(顧客が本当に必要だったもの的な)は,「標準エラー出力だけをパイプに流したい」でした.

./a 2> b.txt

こうすれば,標準エラー出力が b.txt に垂れ流されます.そして別の場所で

tail -f b.txt | less

すれば,随時 b.txt の内容が得られてパイプに流せます.多分これが一番簡単だと思います.

ファイルの容量が気になって昼寝しか出来なくなる各位におかれましては,この世界には mkfifo というコマンドがありまして,これを使うと実際にディスク上に吐き出されることなく先に入ったものが先に出てくる(取り出せる,と言うべきか) First In First Out な擬似的なファイルが出来ますので,以下のようにしてやれば良いと思います.

mkfifo b.txt

# 気になる人は ls -l b.txt してみると普段見慣れないものが見れると思います

./a 2> b.txt
tail -f b.txt | less

(追記おわり)

(追記その2)

一応なんとかなった気ではいますが,やっぱり一個のコマンドで出来てこそな気もしますので,

./a >>>???&&& | less

のようなナニかをするだけで,less に標準エラー出力「だけ」が流し込まれる方法をご存知の方が居ましたら,教えて頂ければ幸いです.

(追記その2おわり)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
30
Help us understand the problem. What are the problem?