我在Ask Ubuntu上编辑了一个建议以下内容的答案
nohup gedit >& /dev/null &
当他们真正的意思是
nohup gedit &> /dev/null &
后者正确地将stderr和stdout都重定向到/dev/null
。我期望前者会创建一个称为的文件,&
或者更有可能像其他情况一样产生错误:
$ echo "foo" >&
bash: syntax error near unexpected token `newline'
相反,它的工作方式gedit
似乎与前者完全相同,出现一个窗口,并且未打印任何错误消息。
我还要注意,这是特定于shell的:
bash
(4.2.45(1)-发行版),zsh
(5.0.2),csh
(deb软件包版本:20110502-2)和tcsh
(6.18.01):如上所述工作,没有错误消息,没有创建文件。dash
(0.5.7-3):$ nohup gedit >& /dev/null & $ dash: 2: Syntax error: Bad fd number
ksh
(93u + 2012-08-01):失败,但是1223
尽管没有gedit
出现窗口,但显然已启动了一个进程():$ nohup gedit >& /dev/null & [1] 1223 $ ksh: /dev/null: bad file unit number
fish
(2.0.0):> nohup gedit >& /dev/null & fish: Requested redirection to something that is not a file descriptor /dev/null nohup gedit >& /dev/null & ^
那么,为什么在某些shell中此命令简单地运行而没有错误(也没有创建输出文件),而在其他shell中失败呢?什么是>&
中的明显特例干什么nohup
?我猜这>& /dev/null
被解释为,>&/dev/null
但是为什么空间不引起这些shell错误?
nohup command
,独立运行的tty你application.According我的记忆,dash
延长的ash
,Debian ash
,ash
所开发OpenBSD
,它的外壳有限,甚至Maemo操作OS(Debian的基础上N900手机)使用破折号,ash
家庭外壳具有有限的使用期望的bash或tcsh的。
dash
打印我的版本,但是包装是0.5.7-3
,您的呢?另外,您确定要跑步dash
吗?那是Ubuntu的默认设置sh
,不是吗?
nohup
,我的问题是为什么>&
在某些shell中似乎单独使用nohup起作用。
dash
。