![<(左V字型/三角形括弧)は何をしますか? [コピー]](https://linux33.com/image/88394/%26lt%3B%EF%BC%88%E5%B7%A6V%E5%AD%97%E5%9E%8B%2F%E4%B8%89%E8%A7%92%E5%BD%A2%E6%8B%AC%E5%BC%A7%EF%BC%89%E3%81%AF%E4%BD%95%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
>
(右のカモメ型)は、プログラムのSTDOUTをファイルにリダイレクトするために使用されることを知っています。echo 'polo' > marco.txt
これは、コンテンツとして名前が付けられたテキストファイルが端末出力に書き込まれるのではなく生成されるためです。また、このビューに示すように、パイプの左側の最初のコマンドのSTDOUTをパイプの右側の2番目のコマンドのSTDINにリダイレクトするために使用される(パイプ)とその違いも理解しています。marco.txt
polo
|
echo 'Hello world' | less
Hello world
less
私はそれがどのように機能するのか本当に理解していません<
。私はそれを試み、marco.txt < echo 'polo'
bashは私にエラーを与えました:-bash: echo: No such file or directory
。誰かがそれがどのように機能し、なぜ使用するべきかを説明できますか?
答え1
<演算子は、ファイルの内容をリダイレクトするために最も一般的に使用されます。例えば
grep "something" < /path/to/input.file > /path/to/output.file
これは、input.fileの内容と「something」を含む出力ラインを出力.fileに取得します。
>演算子の完全な「逆」演算子ではありませんが、ファイルには限られた意味があります。
とても素敵で簡単な説明やその他のアプリケーションについては<参照 IOリダイレクト
更新:<演算子を使用してbashでファイル記述子を使用する方法に関するコメントの質問に答えるには、次の手順を実行します。
stdin(0)、stdout(1)、stderr(2)に加えて、追加の入力および/または出力をbash環境に追加できます。これは、出力をリダイレクトする場所を継続的に切り替えるよりも便利な場合があります。 Bashの3つの「標準」入力/出力の横にある()の#は「ファイル記述子」です。 Bashでは、そのように参照されることはほとんどありません。 Cではより一般的ですが、それにもかかわらず定数は定義されています。たとえば、STDOUT_FILENO は unistd.h または stdlib.h で 1 として定義されます。
ユーザー端末と対話するためにすでにstdinとstdoutを使用しているスクリプトがあるとします。その後、stdin / stdoutストリームに影響を与えることなく、読み取り、書き込み、またはその両方のために別のファイルを開くことができます。これは簡単な例です。基本的には上記のtldp.orgリンクと同じタイプの素材です。
#!/bin/bash -
#open a file for reading, assign it FD 3
exec 3</path/to/input.file
#open another file for writing, assign it FD 4
exec 4>/path/to/output.file
#and a third, for reading and writing, with FD 6 (it's not recommended to use FD 5)
exec 6<>/path/to/inputoutput.file
#Now we can read stuff in from 3 places - FD 0 - stdin; FD 3; input.file and FD 6, inputoutput.file
# and write to 4 streams - stdout, FD 1, stderr, FD 2, output.file, FD 4 and inputoutput.file, FD 6
# search for "something" in file 3 and put the number found in file 4
grep -c "something" <&3 >&4
# count the number of times "thisword" is in file 6, and append that number to file 6
grep -c "thisword" <&6 >>&6
# redirect stderr to file 3 for rest of script
exec 2>>&3
#close the files
3<&-
4<&-
6<&-
# also - there was no use of cat in this example. I'm now a UUOC convert.
今はもう少し理解できることを願っています。実際に没入するには試してみてください。 POSIXマントラを覚えておいてください。すべてがファイルです。したがって、人々が<が実際にファイルにのみ適用されるとしたら、Linux / Unixを制限する問題ではありません。ファイルでない場合は、ファイルのように見え、機能するように簡単に作成できます。
答え2
その後、ファイルを<
古いプログラムの標準入力にリダイレクトします<
。
foo < bar
foo
プログラムはこのファイルを標準入力として使用しますbar
。