2016-12-09 16 views
1

Unixでは、0と2はstdin stdoutとstderrを表しています。
なぜcat 0>ファイルが動作しないのですか

私が理解しているように、「連結」を意味するコマンドcatは、異なるファイルを連結することができます。例えば

cat file>&1fileとstdoutを連結することができ、矢印はstdoutにfileからリダイレクトを意味するので、我々は標準出力である端末からfileの内容を見ることができます。

しかし、以下のコマンドが動作しない理由を私は理解していない:
cat 0>file

私は、このコマンドが動作するはずだと思う、それはstdinとfileを連結して行うようにすることを意味するのでstdinからfileへのリダイレクト。
それが動作しないと、私はエラーを取得するしかし:

cat: input error on standard input: Bad file number

私はちょうどcat filecat file>&1のようにまったく同じですが、私が間違っているようで、cat > filecat 0>fileがまったく同じであることを考えました...

私の驚いたことに、cat 1>filecat > fileは同じです。どうして?

+0

'>'は連結されていません。上書きされます。連結は '>>'です。 – Ruslan

+0

@Ruslan OK。 'cat 0 >> file'も動作しません。 – Yves

+0

あなたは何を達成しようとしていますか? 'cat'スタンダードとファイルをしようとする背後にある論理は何ですか? – PeterK

答えて

3

構文0>filestdinをファイルにリダイレクトします(意味がある場合)。その後catstdinから読み取ろうとし、stdinは入力ストリームではなくなったため、EBADFというエラーが発生します。

EBADF - fd is not a valid file descriptor or is not open for reading.

注リダイレクション(<および>)がシェルによって処理されること、猫は0>fileビットを見ません。

+0

'0> ...'のようなコマンドを書くことはできませんが、 '1> ...'と '2> ...'と書くことができます。つまり、stdoutとstderrは有効なファイルディスクリプタです。 ? – Yves

+1

@トーマスhttp://www.tldp.org/LDP/abs/html/io-redirection.htmlよりも説明できません。 –

+0

'stdin'をファイルにリダイレクトすることは可能かもしれませんが、 'stdin'を出力ストリームと呼びます。これはかなり奇妙です。 –

関連する問題