cat < file
fileの内容をstdoutに出力します。
cat > file
はstdinを Ctrl+D が検出され、入力テキストがfileに書き込まれます。
cat <> file
、少なくとも私のバージョンのBashでは、fileの内容を(エラーなしで)幸福に印刷しますが、ファイルを変更したり、変更したりはしません変更タイムスタンプを更新します。
Bash標準では、一見無視されているように見える>
3番目のステートメント-そして、もっと重要なことは、それはdoingなのか?
Bashは_<>
_を使用して 読み取り/書き込みファイル記述子 を作成します。
リダイレクト演算子
_[n]<>Word
_wordを拡張した名前のファイルが、ファイル記述子nで、またはnが指定されていない場合はファイル記述子0で、読み取りと書き込みの両方のために開かれます。ファイルが存在しない場合は作成されます。
_cat <> file
_はfile
読み取り/書き込みを開き、記述子0(標準入力)にバインドします。普通に標準入力に書き込もうとする人はいないので、賢明に書いたプログラムの_< file
_と本質的に同等ですが、できれば可能です。
単純なCプログラムを作成して、それを直接テストできます。write(0, "hello", 6)
は、標準入力を介してhello
をfile
に書き込みます。
_<>
_は 他のPOSIX準拠のシェルでも機能します と同じ効果があります。
_<> file
_は、ファイルを(デフォルトでは_<
_のように、ファイル記述子0(stdin)でread + writeモードで開きます切り捨てなしおよび- ファイルが事前に存在しなかった場合は作成する。
これは、open()
システムコールに渡される_O_RDWR|O_CREAT
_フラグに対応します。対照的に、_<
_は_O_RDONLY
_であり、_>
_は_O_WRONLY|O_CREAT|O_TRUNC
_および_>>
_ _O_WRONLY|O_CREAT|O_APPEND
_です。
アプリケーションが通常stdinに書き込みを行わないため、stdinを書き込み可能にすることは、多くの場合役に立ちません。アプリケーションは通常、起動時に受け取るファイル記述子に読み取りおよび書き込むことを期待しません。通常、それらはstdin(または自分で開くファイル記述子)から読み取り、stdoutまたはstderr(または自分で開くファイル記述子)に書き込みます。
_<>
_には次の用途があります。
file
が存在しない場合にコマンドを失敗させたくないが、代わりに空のfile
を作成する場合は、_cat <> file
_よりも_cat < file
_を優先することができます。_<>
_の切り捨てのない側面により、所定の場所にあるファイルを上書きすることが役立ちます。ただし、その場合は通常、ファイル記述子0では使用しません。
_printf xxx 1<> file
_
file
の最初の3バイトをxxx
に置き換えます。
Linuxなどの一部のシステムでは、名前付きパイプ(FIFO)の_<>
_は、ブロックせずに(他のプロセスが他端を開くのを待たずに)名前付きパイプを開き、パイプ構造が存続することを保証します。たとえば、
_mkfifo pipe; sed 's/foo/bar/g' <> pipe
_
sed
は、他の任意の数のプロセスからの書き込みデータを処理し、eof
を認識しません。