Apache をいじっていたphp.ini
ところ、関数を持つ PHP ファイルでメールを送信すると、mail()
メールが自分のコンピューターに保存されるようになりました。これはテストや Web 開発者にとって便利です。以下は、私が に追加したコード行ですphp.ini
。
sendmail_path = "cat > /home/cam/Documents/TestEmails/`date '+%Y-%m-%d - %H-%M-%S'`.eml"
次のコード行も機能しました:
sendmail_path = "tee > /home/cam/Documents/TestEmails/`date '+%Y-%m-%d - %H-%M-%S'`.eml"
cat
コマンドとコマンドの違いは何ですかtee
?
答え1
要約:
cat
は、渡された名前のファイルから読み取りますが、tee
書き込みも行います。ファイル名を渡さない場合にのみ、同じ効果があります。それ以外の場合、tee
when you mean を使用すると、cat
読み取ろうとしていたファイルが上書きされ、予期しないデータ損失が発生する可能性があります。
cat
tee
ファイル名を指定しない場合も同様に動作します。これがあなたの例で起こっていることです。コマンドは出力リダイレクト( >
) は渡されますが、実際のコマンドライン引数は渡されません。cat
およびコマンドのファイル名を渡すと、それらは互いに異なる動作をするため、に渡すつもりtee
が にファイル名を渡して、誤ってファイルを上書きしたり、データを失ってしまう可能性もあります。tee
cat
cat
と はtee
引数なしでは同じことを行いますが、引数としてファイル名が渡されると異なることを行います。その理由は、それぞれの動作を考慮することで判別できます。一般に、それらはほぼ反対の動作をします。cat
は潜在的に多数のファイルを読み取り、その出力を 1 か所に送信しますが、 はtee
1 つの入力を読み取り、潜在的に多数のファイルにそれを送信します。
猫
cat
すべての入力ファイルの内容をコピーします標準出力を 1 つずつ実行します。つまり、ファイルを連結します。たとえば、は のcat x y
内容を出力し、その後に の内容を出力します。単一のファイル名が渡されると、そのファイルの内容を標準出力にコピーし、それ以上引数がないので停止します。x
y
cat
一緒に走るといいえファイル名は、デフォルトで独自の標準入力基本的に、それは何であれ読むことを意味しますパイプまたはリダイレクトあるいは、端末に入力されたものに置き換えられます。(別の言い方をすると、ファイル名がない場合、cat
は のように動作します。cat -
なぜなら、 はcat
、他のさまざまなコマンドと同様には、-
特別扱いして標準入力を指定するようにとります。
ティー
tee
標準入力の内容をすべての出力ファイルにコピーします。独自の標準出力もつまり、それはT字路--あるいは、もっと正確に言えば、いいえT字路ではいいえは、名前を渡す出力ファイルの数です。たとえば、tee x
は入力を読み取り、それをファイルに書き込みx
、さらに自身の標準出力にも書き込みます。tee x y
は入力を読み取り、それをファイルに書き込みx
、またファイルに書き込むだけy
でなく、独自の標準出力にも書き込みます。
の最も一般的な使用法は、tee
単一のファイル名引数を使用してパイプラインに挿入することです。たとえば、 というコマンドの出力を というfoo
コマンドの入力にパイプするとしますbar
。 と記述できますfoo | bar
。ただし、 というファイルに出力を記録してlogfile
検査したい場合は、 を使用できますfoo | tee logfile | bar
。
tee
は、指定した名前のファイルを上書きします。ただし-a
、 オプションを渡した場合は、ファイルに追加されます。たとえば、そのログを上書きするのではなく追加するには、 を使用しますfoo | tee -a logfile | bar
。
とは異なりcat
、このtee
コマンドはファイル名引数がない場合を特別なケースとして扱いません。代わりに、入力を単にすべてゼロは、指定したファイル名のファイルをコピーし、通常どおり標準出力に渡します。 の場合と同様に、ファイル名を指定せずにcat
実行するとtee
、標準入力が標準出力にコピーされます。
stdin を stdout にコピーしたいだけの場合は、cat が適しています。
この目的のために引数なしでもcat
も使用できますが、 を使用すると、人々はあなたが何を意味しているか理解できます。引数なしでも問題ありませんが、tee
cat
tee
見た目cat
間違いのように。時には、これは慣用的なそれを実行する方法。
cat
また、とでサポートされているコマンドラインオプションがtee
異なることにも注意してください。これらは主に異なることを行うため、まったく異なる方法で動作をカスタマイズできるため、これは予想どおりです。man cat
そしてman tee
特にこれについての詳細は。
答え2
要約すると、cat
読むためです(手動入力そしてファイル)とファイルへの書き込み(および>
)>>
です。そしてtee
はファイルへの書き込みについてのみ述べていますが、同時に入力を処理するコマンドの出力に応じて異なります。
例えば:
ping 192.168.1.xx | tee [-a] ping_report.txt
上記のコマンドを使用すると、同時にping
コマンドの出力を見るそしてその出力はファイルに書き込まれますping_report.txt
(もちろん後で分析されます)。パラメータ-a
が使用されている場合、入力 (最初のコマンドの出力) がファイルに追加されます。ping_report.txt
それ以外の場合は、新しい入力によって現在のコンテンツが上書きされます。