Linux base shellリダイレクト詳細


一、標準入力、標準出力と標準エラー出力
linux shellがコマンドを実行する時、各プロセスは三つの開いたファイルに関連付けられています。ファイル記述子を使ってこれらのファイルを参照します。ファイルの記述子は記憶しにくいので、shellは同時に対応するファイル名を与えます。
ファイル
ファイル記述子
入力ファイル―標準入力
0(デフォルトはキーボードで、0の場合はファイルまたは他のコマンドの出力)
出力ファイル―標準出力
1(デフォルトはスクリーンで、1の場合はファイル)
エラー出力ファイル―標準エラー
2(デフォルトは画面で、2の場合はファイル)システムには実際に12のファイル記述子があります。ファイル記述子3~9は任意に使えます。
標準入力:キーボードからデータを入力すると、キーボードからデータを読み込みます。標準出力:データを端末に出力します。標準エラー出力:標準エラーを端末に出力します。
標準入力とはキーボードで、標準出力と標準エラー出力は画面または端末を指します。
システムはこの3つのファイルにファイル識別子fdを割り当てています。
Linuxシステムでは、すべてファイルであり、ファイルの操作には、一般的にファイル識別子が必要です。それぞれのファイル識別子は0,1,2である。彼らの関係は以下の表のとおりです。
ファイル記述子
名前
共通略語
標準値
0
標準入力
stdin
キーボード
1
標準出力
stdout
スクリーン
2
標準エラー
stder
スクリーン2.ファイルリダイレクト:プログラム運転の入力元と出力先を変更します。
1.出力リダイレクト:
Command filename
標準出力を新しいファイルにリダイレクトします。
Command>>filename
標準出力を一つのファイルにリダイレクトする(追加)
Command filename
標準出力をファイルにリダイレクトする
Command>filename 2>&1
標準出力とエラーを一緒にファイルにリダイレクトします。
Command 2>filename
標準エラーをファイルにリダイレクトします。
Command 2>>filename
標準出力を一つのファイルにリダイレクトする(追加)
Command>>filename 2>&1
標準出力とエラーを一緒にファイルにリダイレクトする(追加)
2.リダイレクトを入力:
Commandfilename 2
Commandコマンドはfilenameファイルを標準として入力し、filename 2ファイルを標準として出力します。
Command
Commandコマンドはfilenameファイルを標準として入力します。
Command<
標準入力から読み込み、delimiterセパレータに遭遇したことを知る。
3.バインディングリダイレクト
Command>&m
標準出力をファイルディスクリプタmにリダイレクトする
Command<&-
標準入力をオフにする
Command 0>&-
同上
三、使用例

cmd > file
# : cmd file ( )

cmd >> file
# : cmd file ( )

cmd < file
# : file cmd

cmd << text
# : (here document, PHP )
#shell 、

cmd <<- text
# : , here document Tab

cmd <<< word
# : here string
# : http://bash.cyberciti.biz/guide/Here_strings
# : http://linux.die.net/abs-guide/x15683.html

cmd <> file
# : file

cmd >| file
# : cmd file
# shell noclobber

cmd >&n
# : cmd n

cmd m>&n
# : 。 m , n

cmd >&-
# :

cmd <&n
# : n cmd

cmd m<&n
# : 。 m , n

cmd <&-
# :

cmd <&n-
# : n

cmd >&n-
# : n

cmd 2>file
# : file

cmd  > file 2>&1
# : file, 1, file

cmd  >& file
# : file ( )

cmd  &> file
# : ,

cmd  &>> file
# : file ( )

cmd  > f1 2> f2
# : f1, f2

cmd  | tee files
# : cmd ( ) files

cmd 2>&1 | tee files
# : cmd ( ) files

cmd |& tee files
# :

四、shellリダイレクトのいくつかの高級な使い方
1.リダイレクト標準エラー例1:
command 2> /dev/null
commandがエラーを実行した場合、エラーの情報を空のデバイス例2:
command > out.put 2>&1
にリダイレクトして、commandが実行する標準出力と標準エラーをout.putにリダイレクトする(つまり、commandが正しいかどうかは関係なく、出力はout.putに印刷される)。
2.exec用法execコマンドは、現在のshellの代わりに使用できます。つまり、サブshellが起動されていません。このコマンドを使うと、既存の環境変数が消去され、shellが再起動されます。
exec command
の中で、commandは通常shellスクリプトです。ファイルのディスクリプタを操作する時に使います。今のshellの例を上書きしません。
まず、exc 3<&0例2:
#!/bin/bash
#file_desc


exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2

菘循環読取りファイル記述子3(読み取ったのはtest.sh内容)
exec 3<>test.sh;
# test.sh , 3

while read line<&3
 do
    echo $line;
done
\33751;クローズファイルの入力、バインディング5、bashellリダイレクトのいくつかの特殊ファイルを出力する。
ファイル
説明
//dev/stdin
ファイル記述子0の複製
//dev/stdout
ファイル記述子1の複製
//dev/stder
ファイル記述子2の複製
//dev/fd/n
ファイル記述子nの複製
//dev/tcp/host/port
BashはportでホストへのTCP接続を開きます。
//dev/udp/host/port
BashはポータブルでホストへのUDP接続を開きます。