Linuxのファイルディスクリプタとリダイレクト
pursuer.chen 2016年4月12日14:08による、 4191読書、 8件のコメント、 お気に入り、 編集
入門
ファイルディスクリプタは、スクリプトを書くときに、多くの場合、コンテンツへの出力をリダイレクトする標準のファイルディスクリプタを使用し、関連するファイルの入力と出力の整数であり、0,1,2は、ファイルディスクリプタがある(標準入力、標準出力、標準エラー出力に対応)、<、>、>>演算子と呼ばれます。
コンセプト
STDIN(0):標準入力、幾分概念が容易例を理解:1. <電流指令2の内容は、次のコマンドと次のコマンド、および実際のコンテンツにパイプされ、ファイルから読み込みます。したがって、次のコマンドが標準入力から読み取られるに送信STDIN。
標準出力(1):標準出力;これはデフォルトのオプションです。使用方法:1>>と等価である か、 同等>>;あなたが他のファイル記述子を使用したい場合は、記述子は、オペレータの前に配置する必要があります。
標準エラー(2):標準誤差、2>を使用するか、2 >>、標準誤差は、端末に表示されるエラーメッセージを表示せずにファイルに挿入することができます。
<:ファイルから読み込みます。
>:ファイルにコンテンツ、各々が挿入される前にファイルの内容を空にする。
>>:ファイルに内容は、内容が既存のファイルに追加します。
例
テストデータを生成します
"ハロー単語"> test1のエコー CP test1のテスト2 のchmod 000 TEST2
標準入力(0)
1.テキストからコンテンツを読みます
猫<TEST1
2.読み出したコンテンツは、次のコマンドにパイプされます
猫TEST1 | TR -T 'AZ' 'AZ'> test1.new
標準入力(1)
ファイルにリダイレクトコンテンツ
「これは標準出力1である」> STD1エコー
ファイルに追加
標準エラー出力(2)
端末がエラーを表示するエラーが発生しました、エラーメッセージは、端末を表示しないファイルに書き込むことができます
stdoutとstderrの情報がファイルに挿入されている間、使用&
エラーメッセージは標準出力に向けられています
エコー"名前" 2>&1 >> A 或者 エコー"名前" >> 2>&1
内部リダイレクトスクリプトテキストブロック、猫<< EOF >> log.txtというEOF
カスタムファイルディスクリプタ
、<、> >>プレフィックス&カスタム記述子カスタム記述子を呼び出すときの意味は、先に説明した。また、カスタムファイルディスクリプタexecを使用する必要があります。
1.カスタム標準入力は、ファイルから読み込ん3標準入力として定義され、その後、あなたは、ファイルの結果は同じ、やや似割り当てている3、3コールと直接電話を呼び出すことができます。
幹部3 <TEST1
2.カスタムSTDOUT、テスト結果は、カスタム記述子の使用は>データをファイルに書き込み、内容を空にする前に繰り返されないことを示したが、標準的な記述で書かれて再びクリアされます。
概要
スクリプトファイルディスクリプタは非常に頻繁に使用されるには、一般的に使用される方法は、標準出力と標準エラー出力を使用することです。
入門
ファイルディスクリプタは、スクリプトを書くときに、多くの場合、コンテンツへの出力をリダイレクトする標準のファイルディスクリプタを使用し、関連するファイルの入力と出力の整数であり、0,1,2は、ファイルディスクリプタがある(標準入力、標準出力、標準エラー出力に対応)、<、>、>>演算子と呼ばれます。
コンセプト
STDIN(0):標準入力、幾分概念が容易例を理解:1. <電流指令2の内容は、次のコマンドと次のコマンド、および実際のコンテンツにパイプされ、ファイルから読み込みます。したがって、次のコマンドが標準入力から読み取られるに送信STDIN。
標準出力(1):標準出力;これはデフォルトのオプションです。使用方法:1>>と等価である か、 同等>>;あなたが他のファイル記述子を使用したい場合は、記述子は、オペレータの前に配置する必要があります。
標準エラー(2):標準誤差、2>を使用するか、2 >>、標準誤差は、端末に表示されるエラーメッセージを表示せずにファイルに挿入することができます。
<:ファイルから読み込みます。
>:ファイルにコンテンツ、各々が挿入される前にファイルの内容を空にする。
>>:ファイルに内容は、内容が既存のファイルに追加します。
例
テストデータを生成します
"ハロー単語"> test1のエコー CP test1のテスト2 のchmod 000 TEST2
標準入力(0)
1.テキストからコンテンツを読みます
猫<TEST1
2.読み出したコンテンツは、次のコマンドにパイプされます
猫TEST1 | TR -T 'AZ' 'AZ'> test1.new
標準入力(1)
ファイルにリダイレクトコンテンツ
「これは標準出力1である」> STD1エコー
ファイルに追加
標準エラー出力(2)
端末がエラーを表示するエラーが発生しました、エラーメッセージは、端末を表示しないファイルに書き込むことができます
stdoutとstderrの情報がファイルに挿入されている間、使用&
エラーメッセージは標準出力に向けられています
echo "name" 2>&1 >> a 或者 echo "name" >> a 2>&1
重定向脚本内部文本块,cat <<EOF>>log.txt EOF
自定义文件描述符
自定义文件描述符也需要用到exec;< ,>,>>意思和前面解释的一样,当调用自定义的描述符时需要在自定义的描述符前加上&。
1.自定义stdin,将3定义为stdin从文件中读取内容,然后就可以调用3了,调用3和直接调用文件结果是一样的,有点类似赋值。
exec 3<test1
2.自定义stdout,测试结果发现在自定义描述符中使用>往文件中重复写数据并不会清空之前的内容,但是在标准的描述符中是会清空再写入的。
总结
文件描述符在脚本中使用的非常频繁,常用的使用方法就是标准输出和标准错误。