2012-04-17 7 views
7

最近、 "> outfile < infile cat"というシェルコマンドが出てきました。これは "cat infile> outfile"と機能的に同等です。そのため、一般的な形式は "> outfile < infileコマンドarg1 ... argN"は "command arg1 ... argN infile> outfile"になります。シェルコマンド ">"で始まる

とにかく、 ">"がこの効果をどのように達成し、どのように実際に使用されているかについて誰かが詳しく説明できるかどうか疑問に思っていました。

+0

なぜこれがダウンリストされましたか?それは良い質問です。 – Aatch

答えて

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 
4

">"は、単にコマンドの出力を次の引数として与えられたファイルにリダイレクトします。典型的な使い方は、コマンドの最後にこれを追加することですが、どの場所にでも置くことができます。したがって:

> outfile <command><command> > outfileに相当します。入力リダイレクトについても同様です。

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

+0

あなたは神話の 'コマンド'の周囲に山括弧を使用しないでください。 –

+0

@MichaelBurr yeap私はそれを考えましたが、より良いフォーマットを考え出すことはできませんでした。 –

+1

'> OUTFILE COMMAND'、 '>%outfile%%command%'、 '$ outfile $ command' – user123444555621

1

同等ではありません。むしろ

cat infile > outfile 

、それはあなたがそれを見たら

cat <infile> outfile 

が(同じ cat <infileとしてだけでは猫の場合には、 cat infileがある)であること元のコマンドはもっと簡単です。

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ページのリダイレクトのセクションを参照してくださいすることができます。

1

つのノート。あなたが実際にこの

< file command 

を書くことができますので、それは猫の無駄な使用はすべて、より許せないになります:

cat file | command 

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

関連する問題