STDINリダイレクトの実際の用途は何ですか? [閉鎖]

STDINリダイレクトの実際の用途は何ですか? [閉鎖]

STDINリダイレクトの単一の実際の用途を考えることは困難です。cat < /etc/passwdSTDINリダイレクトの例ですが、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 < filecmd1 | cmd2cmd2

  1. プログラムがファイルからデータを読み取る必要がある場合、プログラムは入力ファイル名の引数を受け入れません。あなたが指摘したように、どちらも例です。cat < filesort < file< いいえと言えるので必要です。良い例は、fkraiemがコマンドをファイルに入れ、次に話す例です。cat filesort fileeded parameter_file < commands_file
  2. プログラムがファイルからデータを読み取らなければならないときに入力ファイル名引数が与えられると、プログラムはstdinから読み取るときとは異なる動作をします。私が知っている例の1つは、wc出力がどこにあるかです。出力はスクリプトで使用するのがはるかに困難です。 IMNSHO、これはバグですが存在します。wc -l < filenamenumber_of_lineswc -l filenamenumber_of_lines   filenamewc
  3. テキストファイルの値で操作を実行したい場合:

    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印刷コマンドです。プリンタキューからファイル名がリークされたくない場合は、ファイル名の代わりにリダイレクトを引数として使用できます。

関連情報