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                        確認
Last modified: Wednesday, 9 March 2016, 7:19 PM