blog

リダイレクトの落とし穴

Linux講座

2017.01.11

リダイレクトの落とし穴

年が明けて一週間以上経過しましたが、
あけましておめでとうございます。
今年もエンジニアカレッジを宜しくお願い致します!

今回はリダイレクトする時の注意を一つ。

テキストファイルの中身をsortコマンドで並び替えて出力したり、
uniqコマンドで重複部分をまとめて出力した場合
画面上にその結果が標準出力されます。
しかしながら、ファイルの中身自体が書き変わる訳ではありませんので
その結果を保存したい場合は>(リダイレクト)を用いてファイル出力をする方法があります。

例えばこんな感じ
ブログ0111_1

その時の注意点 がひとつ
リダイレクトの後に指定する出力先のファイル名は 【新規のファイル名】 にしてください。

コマンドを実行したいファイル名をuniqコマンドの後に指定していますが
リダイレクトで指定する標準出力先ファイル名も同じ名前にした場合、大変な事が起こります。

やりたい気持ちはわかります。
コマンド処理をして、結果を上書き保存したい。
みたいな感じですよね。
 
実際にコマンドを実行してみます。
そうしたら、そのファイルの中を確認してみましょう。
ブログ0111_2

なんとまぁ、ファイルの中身が消えてしまっています!
そうです、この様にコマンドを実行してしまいますと、大事なデータが消えてしまうのです。

その理由なのですが、このコマンドの処理の順番が関係しています。

リダイレクトが付いていると、Linuxの処理の順番としては

リダイレクトで指定している出力先ファイルの作成
 ↓
uniqコマンドの実行
 ↓
実行結果を作成したファイルに書き込み

という順番になります。
という事は、まず始めにリダイレクトで指定しているファイル作成から開始されますので
その時点で、指定ファイルが何も書き込まれていない、まっさらな中身に上書きされてしまっているのです。
そしてその後、何も書き込まれていない(上書きされてしまった)ファイルに対してuniqコマンドを実行している。
結果、何も書き込まれていないファイルがそのまま残る。
と言った流れになるのです。

ですので、コマンド処理をした結果をファイル保存したい場合は、
必ず新規のファイル名を指定するようにして下さいね!
 

SHARE

最新記事

無料相談する

INTERNOUS,inc. All rights reserved.