シェル その2
완료 조건
Shell (貝殻) その2
シェルの便利な機能.その2
- 標準入出力,標準エラー出力の違い
標準入力 ファイル番号0番
標準出力 ファイル番号1番
標準エラー出力 ファイル番号2番 - パイプ
コマンド1 | コマンド2
コマンド1の標準出力を,コマンド2の標準入力へ
例)
$ ls -l | less
$ cat data | sort | uniq
- リダイレクション 標準入出力・エラー出力の切り替え
< file 「標準入力」をファイル file に切り替える. > file 「標準出力」をファイル file に切り替える.ファイルの上書き. >> file 「標準出力」をファイル file に切り替える.ファイルへ追加. &> file 「標準出力」と「標準エラー出力」をファイル file に切り替える.ファイルの上書き. > fileA 2> fileB 「標準出力」をファイル fileA へ.「標準エラー出力」をファイル fileB へ. > fileA 2>&1 「標準出力」と「標準エラー出力」を同じファイル fileA へ. >| file 「標準出力」をファイル file へ強制上書き.
- シェルオプション noclobber が設定されている場合は > で上書きできない.その場合は >| を使用する.
- noclobber が設定されているかどうかは echo $SHELLOPTS で確認できる.
- マニュアルでは unset noclobber で解除できると記述してあるが,Vine のbash では noclobber の解除できない.
演習
- 前回の添付資料の「2.テキスト処理」 を良く読んでみよう.
- stderr を ここ からダウンロード.
- $ chmod u+x stderr を実行.stderr を実行できるようにするおまじない.一度やればOK
パイプの練習.
$ ./stderr コマンドの実行
$ ./stderr | sort コマンドの出力をソート
$ ./stderr | sort | uniq コマンドの出力で同じものを削除
標準エラー出力はソートされない.何故だろう?
リダイレクションの練習.
$ cat > data1 キーボートから何か入力して ^D を押す(Ctrl+d)
$ cat data1 data1 の中を確認
$ cat > data2 キーボートから何か入力して ^D を押す(Ctrl+d)
$ cat data2 data2 の中を確認
$ cat data1 >> data2 data2 へ data1 の内容を追加
$ cat data2 data2 の中を確認
$ cat data1 > data2 data2への上書き.エラーになる.
$ cat data2 data2 の中を確認.変更されていない.
$ cat data1 >| data2 data2への強制上書き.
$ cat data2 data2 の中を確認.変更されている.
$ ./stderr > std 2> err 標準出力を stdへ.エラー出力を errへ.
$ cat std 確認
$ cat err 確認
$ ./stderr > out 2>&1 標準出力とエラー出力を outへ.
$ cat out 確認
마지막 수정됨: 수요일, 9 3월 2016, 7:19 PM