STDINリダイレクトの単一の実際の用途を考えることは困難です。cat < /etc/passwd
STDINリダイレクトの例ですが、catを無駄に使用するのと同じくらい愚かです。私は15年間Linuxを使用してきましたが、STDINリダイレクトが必要だったときは思いません。誰も実際のケースがありますか?
答え1
いくつかのユースケースがあり、これがその一つです。カーネルパッチを適用します。
cd linux-3.16.2 && patch -p1 < patch-3.16.2-3
答え2
ああ先生ですね…! ! !
mysql -uUSERNAME -p < sqlfile.sql
sort < domain_list.txt > sorted_domain_list.txt
テキストの単語数を計算します。
root@debian:/home/mohsen# wc -c << EOF
> This is a simple lookup program
> for good (and bad) restaurants
> in Cape Town.
> EOF
90
答え3
私はあなたがプログラムの標準入力をファイルにリダイレクトするために構文を使用することを具体的に要求していると仮定します。質問が少し曖昧なので、このように質問します。結局、stdinもリダイレクトされます。cmd < file
cmd1 | cmd2
cmd2
- プログラムがファイルからデータを読み取る必要がある場合、プログラムは入力ファイル名の引数を受け入れません。あなたが指摘したように、どちらも例です。
cat < file
sort < file
<
いいえと言えるので必要です。良い例は、fkraiemがコマンドをファイルに入れ、次に話す例です。cat file
sort file
ed
ed parameter_file < commands_file
- プログラムがファイルからデータを読み取らなければならないときに入力ファイル名引数が与えられると、プログラムはstdinから読み取るときとは異なる動作をします。私が知っている例の1つは、
wc
出力がどこにあるかです。出力はスクリプトで使用するのがはるかに困難です。 IMNSHO、これはバグですが存在します。wc -l < filename
number_of_lines
wc -l filename
number_of_lines filename
wc
テキストファイルの値で操作を実行したい場合:
var1 var2も読んでください… する コードの使い方変数1、変数2、など… ︙ 完了<文書
答え4
特定のファイルを特定のコマンドへの入力に送信するには、標準入力リダイレクトが必要な場合がよくあります。これは主に一時的な結果をファイルに保存するスクリプトで発生します。状況に応じて、パイプ(一時ファイルは不要)または標準入力リダイレクトを使用する一時ファイル(終了状態を介して移植可能な方法でエラーを制御する方が簡単であるという利点)を使用できます。
一部のコマンドは入力を引数として受け入れることができます。この場合、通常は標準入力リダイレクトは必要ありません。しかし、興味深いことに、入力がどのように提供されるかによって異なりますcat
。たとえば、次のようにしますgzip
。
$ echo foo > text
$ gzip -k text
$ file text.gz
text.gz: gzip compressed data, was "text", last modified: Thu Sep 18 00:38:18 2014, from Unix
ここからファイルのタイムスタンプを取得しますtext
。次に、text
ファイル名を引数として指定するのではなく、リダイレクトを使用します。
$ gzip < text > text.gz
$ file text.gz
text.gz: gzip compressed data, last modified: Thu Sep 18 00:38:18 2014, from Unix
それでも同じタイムスタンプを取得しますが、元のファイル名は圧縮ファイルに保存されなくなります(gone was "text"
)。それでは、役に立たないように見えるパイプを使ってみましょうcat
。
$ cat text | gzip > text.gz
$ file text.gz
text.gz: gzip compressed data, last modified: Thu Sep 18 00:43:46 2014, from Unix
今回はタイムスタンプが変更されました。ファイルのタイムスタンプではなく、gzipが実行された日時ですtext
。
したがって、目的とコマンドの種類によっては同じように見えますが、実際にはわずかに異なる結果を提供する3つのソリューションがあります。
注:もう1つの例はlpr
印刷コマンドです。プリンタキューからファイル名がリークされたくない場合は、ファイル名の代わりにリダイレクトを引数として使用できます。