7

最近、次のようなシェル コマンドに出くわしました: "> outfile < infile cat"。機能的には "cat infile > outfile" と同等のようです。ちなみに、一般的な形式は "> outfile < infile command arg1 ... argN" のようですが、"command arg1 ... argN infile > outfile" になります。

とにかく、先頭の ">" がこの効果をどのように達成するか、またそれの実用的な用途があるかどうかについて誰かが詳しく説明できるかどうか疑問に思っていました.

4

5 に答える 5

6

Bash Reference Manual」には、リダイレクト演算子について次のように記載されています。

次のリダイレクション演算子は、単純なコマンド内の任意の場所に先行または出現するか、コマンドの後に続く場合があります。

したがって、次のコマンドはすべて同等です。

ls -al > listing.txt
> listing.txt ls -al
ls > listing.txt -al

最初の形式が最も一般的だと思いますが。

リダイレクトの相対的な順序は重要であることに注意してください。たとえば、あるファイル記述子を別のファイル記述子にリダイレクトする場合は、次のように異なります。

ls > listing.txt 2>&1   # both stdout and stderr go in to listing.txt

ls 2>&1 > listing.txt   # only stdout goes to listing.txt, because stderr was made
                        #    a copy of stdout before the redirection of stdout
于 2012-04-17T06:12:59.640 に答える
4

">" は、コマンドの出力を次の引数として指定されたファイルにリダイレクトするだけです。典型的な使用法は、これをコマンドの最後に追加することですが、任意の場所に追加できます。そう:

> outfile <command>と同等 <command> > outfileです。入力リダイレクトについても同じことが言えます。

<command>上記の例は奇妙な構文ではないことに注意してください。単に任意のコマンドを置き換えるだけです。

于 2012-04-17T05:48:32.303 に答える
1

同等のものは次のとおりではありません。

cat infile > outfile

むしろ、

cat < infile > outfile

(ただし猫の場合cat infileは と同じcat <infile)

そのように見ると、元のコマンドはより単純に見えます。

于 2012-04-17T05:52:12.693 に答える
1

1 つのメモ。それはあなたが実際にこれを書くことができるからです

< file command

それは猫の無用な使用をますます許しがたいものにします。

cat file | command

つまり、何らかの理由でファイルを構文的にコマンドの左側に配置したい場合でも、cat!は必要ありません。

于 2012-04-17T18:43:37.580 に答える
0

先頭の大なり記号 (>) は、出力をリダイレクトするために使用されます。デフォルトでは、STDOUT をリダイレクトします。この場合、STDOUT は空であるため、新しい空のファイルが作成されます (同様の効果touch output)。

このスタイルのコマンドを使用して、既存のファイルを空にすることもできます。

    $ echo FOO >/tmp/foo
    $ ls -l /tmp/foo
    -rw-r--r--  1 flah  wheel  4 Apr 17 01:49 /tmp/foo
    $ > /tmp/foo
    $ ls -l /tmp/foo
    -rw-r--r--  1 flah  wheel  0 Apr 17 01:49 /tmp/foo
    $ 

詳細については、bash の man ページの Redirection セクションを参照してください。

于 2012-04-17T05:52:24.913 に答える