コマンド > log.txt で結果をファイルに保存したら、エラーメッセージだけ画面に出てきた
全部ファイルに入るんちゃうの
【疑問】「> log.txt」したのにエラーだけ画面に出る。標準出力・標準エラー・パイプ【LPICレベル1】
>>1
出力には2本の道がある。標準出力(番号 )と標準エラー出力(番号 )。入力側の標準入力は番号 > は 1> の省略で、標準出力だけをファイルに向ける。エラーは 番の道やから画面に残る
>>2
試してみたls a.txt nofile > out.txt 2> err.txt
out.txt に a.txt、err.txt に ls: cannot access 'nofile': No such file or directory が入った
両方まとめて1つのファイルに入れるには?
>>4> both.txt 2>&1。2>&1 は「 番を、今の 番と同じ先に向ける」という意味
bash なら &> both.txt でも同じ
>>5
順番を逆にして 2>&1 > both.txt でもええやろ
>>6
あかん。リダイレクトは左から順に処理される
先に 2>&1 を処理した時点では 番はまだ画面やから、 番は画面に向く。そのあと 番だけがファイルに向く
結果、エラーは画面に出たまま
> と >> の違いは
>>8> はファイルを空にしてから書く(上書き)。>> は末尾に追記する
うっかり上書きが怖いなら set -o noclobber。既存ファイルへの > が cannot overwrite existing file で失敗するようになる。それでも上書きしたいときは >|
パイプ | も出力をつなぐやつやろ。エラーも流れるん
>>10
パイプが渡すのは標準出力だけls a.txt nofile | wc -l は (エラーは画面に出て、数えられない)ls a.txt nofile 2>&1 | wc -l なら 。bash では |& と書いても同じ
入力のほうの < は何に使うん
>>12
ファイルを標準入力として渡すwc -l u.txt は 4 u.txt とファイル名つきで出るけど、wc -l < u.txt は 4 だけ。wc はファイル名を知らされずに、流れてきた中身だけを数えてるから
エラーがうるさいときの 2>/dev/null ってよく見る
>>14/dev/null は書き込んだものを全部捨てる特別なファイルfind / -name '*.conf' 2>/dev/null なら、読めないディレクトリの Permission denied を捨てて、結果だけ見られる
画面にも出しつつファイルにも保存したい
>>16tee。コマンド | tee out.txt で、受け取った内容をファイルに書きながら、そのまま次に流す
追記したいなら tee -a
sort file.txt > file.txt で並べ替えて上書きしたら、ファイルが空になった
>>18
シェルは、コマンドを動かす前に > の先を空にする
sort が読みにいった時点で file.txt はもう空やから、空の結果が書かれる
別のファイルに出してから mv するか、sort -o file.txt file.txt を使う
重複行を数える sort | uniq -c の sort っているん?uniq だけでよくない?
>>20
uniq は隣り合った重複しかまとめない
b、a、b、a の4行に uniq をかけても4行のまま。sort で同じ行を隣に集めてから uniq -c すると、2 a と 2 b になる
番号で覚えるのが一番やな。 が入力、 が出力、 がエラー> もパイプも 番だけで、リダイレクトは左から
管理人のひとこと
- 標準入力()、標準出力()、標準エラー出力()。
>は1>の省略で、エラーは2>で別に向ける。 - 両方をファイルに入れるのは
> file 2>&1(bash なら&>)。リダイレクトは左から処理されるので、2>&1 > fileではエラーが画面に残る。 >は上書き、>>は追記、set -o noclobberで上書きを防げる。パイプは標準出力だけを渡す(エラーも渡すなら2>&1 |)。sort f > fは先にファイルが空になって中身が消える。2>/dev/nullはエラーを捨て、teeは保存しながら流す。uniq は隣り合った重複しかまとめないので先に sort する。