[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: A small doubt



On Mon, Jul 23, 2001 at 10:34:27AM +0530, shyamk@eth.net wrote:
| Good Morning/Evening  to all,
|          I guess that it is standard in Unixes that :
| 0 : STDIN : keyborad
| 1 : STDOUT : monitor
| 2 : STDERR : error output device
| 
| If this much can be accepted , and this is true for Linux verssions , too ,

Yes, but STDIN and STDOUT don't _have_ to be connected to the keyboard
and monitor.

| then how come I am given an error by my Linux machine for example :
| [shyam @shyam shyam] cat < 0
| Sample
| ^d
| 
| Can not open 0 : No file or directory
| [shyam @shyam shyam]
| 
| The same occurs for 1 (STDOUT) also.

With the syntax you gave, bash doesn't treat the '0' or '1' specially.
Then cat looks for a file to open (with fopen() function) and there is
no file named "0" (or "1") in the current directory.  I'm not sure
what the proper name for the "&" operator in bash is, but I think of
it as an address-of operator (since its function is similar to C's
address-of operator and is spelled the same).  If you use that it will
work :

$ cat <&0
asdf
asdf
^D
$

(I typed the first line and it echoed the second).  The more common
useage is to make STDERR go to the same file as STDOUT.  Ie :

$ command 2>&1 > filename

It redirects STDERR (2, since it is on the left hand side it is
automatically a file descriptor, not a file name) to STDOUT (the 1,
but you need the "address-of" it so it is known to be a file
descriptor and not a filename).  Then it redirects STDOUT to filename
(the "> filename" part).

HTH,
-D



Reply to: