On Sun, Mar 1, 2009 at 7:09 PM, Chris Mirchandani <[email protected]> wrote:
>
> Thank you Mr. Lanning,
>
> I tried your suggestion, see below, and it does work like I want, but I have
> 2 questions.
>
>> ssh [email protected] "sleep 1000 < /dev/null> /dev/null 2>&1 &"
>
> 1) I see a lot of scripts use the form /dev/null> /dev/null 2>&1 rather than
> < /dev/null
> > /dev/null 2>&1. Why don't you want/need the latter in scripts?
This actually depends on the command running.
< /dev/null
This redirects STDIN (usually the keyboard) to read from /dev/null.
/dev/null is a special
file (called a device file) that gives the End Of File marker every
time it is read. If you
want the command to read from a file, then you replace "/dev/null"
with /path/to/file.
>/dev/null
This redirects STDOUT (usually the screen) to /dev/null. Anything
written to /dev/null
is just discarded. So, if you want to save the output to a file,
then you replace "/dev/null"
with /path/to/output/file. You do have to be careful, as the ">"
operator truncates the file
when it opens it for writing.
x>&y
This copies file descriptors.
STDIN is file descriptor 0
STDOUT is file descriptor 1
STDERR is file descriptor 2
So, 2>&1 copies file descriptor 1 to file descriptor 2, thus makes
STDERR goto the same
place as STDOUT.
If you want STDERR to goto a different file than STDOUT, then you can use
"2> /path/to/error/file"
If you don't use "< /dev/null" then the command will still have the
terminal open for reading.
Sometimes this is just fine, as the command does not do anything with
the terminal (ie. read
from it.) Sometimes it isn't, if the command tries to read from
STDIN, it will interrupt your
shell.
If you want to close your shell completely, then you will need to
redirect STDIN for
the command, as the terminal will disappear (if it is a network or
Xwindow session.) In this
case, you will also want to use "nohup" to run the command. This will
set the process flag
to ignore the HangUp (SIGHUP) signal, that the shell sends to all it's
child processes upon
exit. Commands that do not specifically handle SIGHUP will default to
exiting upon
receiving the HUP signal.
In Linux, you can get a list of all available POSIX Signals via the
"kill -l" command or
looking in /usr/include/linux/signal.h.
> 2) If I enable logging for my remote ssh command, which is an ssh command,
> will
> < /dev/null> /dev/null 2>&1 change logging in any way?
This all depends on how logging is implemented.
If it uses Syslog or writes directly to a file, no. If it logs to
STDOUT or STDERR, then yes.
See above for what happens to STDOUT and STDERR, if logging is done
via either of
those.
If it uses Syslog or writes directly to a file, then the log will be
on the remote machine,
only.
--
And, did Galoka think the Ulus were too ugly to save?
-Centauri