`nohup`、`&` 和重定向之间的顺序?

Tim*_*Tim 5 bash io-redirection nohup background-process

和重定向一起使用时nohup,正确的顺序是什么&

为什么其他命令不正确?

例如,

$ nohup firefox& &> /dev/null

$ nohup firefox &> /dev/null  &
Run Code Online (Sandbox Code Playgroud)

而且我不知道如何更改 nohup 与重定向和&.

另一个例子,

$ nohup sleep 1000 & &>/dev/null
Run Code Online (Sandbox Code Playgroud)

不会重定向到/dev/null,但仍会重定向到./nohup.out

Jak*_*uje 4

我将从手册页中的SHELL GRAMMAR部分开始bash

\n
\n

简单命令

\n

一个 简单的命令是一系列可选的变量赋值,后跟空格分隔的单词和重定向,并由控制运算符终止。

\n
\n

因此,重定向( &>/dev/null) 首先进行,控制运算符随后进行 ( &)。

\n

编辑:为了使答案完整,这是简单命令nohup的第一部分。它在 中没有任何特殊含义。bash

\n

正是你的例子(除了这/dev/null只会让它变得复杂):

\n
jakuje@E6430:/tmp$ rm nohup.out out\njakuje@E6430:/tmp$ nohup sleep 1 & &>out\n[1] 10876\nnohup: ignoring input and appending output to \xe2\x80\x98nohup.out\xe2\x80\x99\n[1]+  Done                    nohup sleep 1\njakuje@E6430:/tmp$ cat nohup.out             # empty\njakuje@E6430:/tmp$ cat out                   # empty\njakuje@E6430:/tmp$ rm nohup.out\njakuje@E6430:/tmp$ nohup sleep 1 &>out &\n[1] 10882\n[1]+  Done                    nohup sleep 1 &> out\njakuje@E6430:/tmp$ cat nohup.out             # no file\ncat: nohup.out: No such file or directory\njakuje@E6430:/tmp$ cat out                   # output of nohup\nnohup: ignoring input\n
Run Code Online (Sandbox Code Playgroud)\n