cat < file
コンテンツ印刷文書標準出力として。
cat > file
Ctrl+が検出されるまでstdinを読み、D入力テキストを作成します。文書。
cat <> file
、少なくとも私のBashバージョンでは、以下を印刷します。文書問題はありませんが(エラーなし)、ファイルは変更されず、修正タイムスタンプも更新されません。
Bash標準は、3番目のステートメントで無視されたように見える内容をどのように正当化しますか>
?さらに重要なこと行為何か?
答え1
Bashは<>
生成に使用します。ファイル記述子の読み書き:
リダイレクト演算子
[n]<>word
ファイルディスクリプタnまたはnが指定されていない場合は、ファイルディスクリプタ0で読み書きするために単語拡張子を持つファイルを開くようにします。ファイルが存在しない場合、ファイルが生成されます。
cat <> file
読み書きをオンにして、ディスクリプタfile
0(標準入力)にバインドします。< file
通常、誰もが標準入力に書き込もうとしないという点で合理的に書かれたプログラムと本質的に同じです。しかし、誰かがそうすればそうすることができます。
これを直接テストするために、単純なCプログラムを書くことができます。write(0, "hello", 6)
これは標準入力で作成されますhello
。file
<>
しなければならない他のPOSIX互換シェルでも動作します。同じ効果があります。
答え2
<> file
ファイルを開く(デフォルトはファイル記述子0(stdin)、例<
:)読み取り+書き込みモデル切り捨てなしそして以前にファイルがない場合は、ファイルを作成します。。
これはシステムコールO_RDWR|O_CREAT
に渡されたフラグに対応します。open()
対照的に、<
例O_RDONLY
と>
例はO_WRONLY|O_CREAT|O_TRUNC
と です>>
O_WRONLY|O_CREAT|O_APPEND
。
標準入力を書き込み可能にすることは、通常、アプリケーションが標準入力に書き込まないため、あまり便利ではありません。アプリケーションは通常、読みたくありません。そして起動時に受信したファイル記述子に書き込みます。通常はstdin(または自己開かれたファイル記述子)から読み取られ、stdoutまたはstderr(または自己開かれたファイル記述子)に書き込まれます。
<>
次の用途に使用できます。
- 存在しないコマンドが失敗するのを防ぐために、空の
cat <> file
コマンドを生成することをお勧めします。cat < file
file
file
切り捨て防止の側面は、
<>
ファイルを所定の場所に上書きするのに役立ちます。ただし、この場合、通常はファイル記述子0では使用されません。printf xxx 1<> file
最初の3バイト
file
をxxx
。一部のシステム(Linuxなど)では、ブロックされてい
<>
ない(他のプロセスがもう一方の端を開くのを待たずに)、名前付きパイプ(FIFO)で名前付きパイプを開くと、パイプ構造がアクティブのままになります。たとえば、mkfifo pipe; sed 's/foo/bar/g' <> pipe
sed
書き込み操作を実行する他のプロセスは着信データを処理しますが、表示されませんeof
。