Что делает "</dev/null> &/dev/null" в конце команды?

Один из скриптов, которыми я управлял ssh, был висит, и я нашел для него решение на этом сайте: http://www.snailbook.com/faq/background-jobs.auto.html

Сайт решает проблему, добавив это в конец команды:

xterm < /dev/null >& /dev/null &

Я думаю, что знаю, что из этого делает, но может ли кто-нибудь помочь объяснить?

Первая часть:

# For stdin, read from /dev/null
< /dev/null

Вторая часть:

>& /dev/null

Что делает >&? Я видел 2>&1, который является прямым STDERR для STDOUT, но когда нет чисел, означает ли это перенаправление всего на /dev/null?

Ответ 1

Да, это означает перенаправление как stdout, так и stderr на /dev/null.

От info "(bash)Redirections":

Перенаправление стандартного вывода и стандартная ошибка

Bash допускает как стандартный вывод (дескриптор файла 1), так и стандартный вывод ошибки (файловый дескриптор 2) для перенаправления в файл чье имя является расширением WORD с помощью этой конструкции.

Существует два формата для перенаправления стандартного вывода и стандартной ошибки:

&>WORD

и

>&WORD

Из двух форм предпочтительным является первое. Это семантически эквивалентно

>WORD 2>&1

Ответ 2

С ssh другим способом (для достижения того, что вы, вероятно, захотите), является передача флага -f, т.е.

ssh -X -f your.host.org xterm

Ответ 3

Googling для 'перенаправления потоков > & 'позволит вам найти http://tldp.org/LDP/abs/html/io-redirection.html

который, между прочим, сообщает вам

  >&j

  # Redirects, by default, file descriptor 1 (stdout) to j.
  # All stdout gets sent to file pointed to by j.

Возможно, это уже помогает.

Или найдите помощь стандартных оболочек unix, например bash, для перенаправления потока.

Rgds,

Томас