I edited an answer on Ask Ubuntu that was suggesting the following
nohup gedit >& /dev/null &
When they actually meant
nohup gedit &> /dev/null &
The latter correctly redirects both stderr and stdout to /dev/null
. I was expecting the former to either create a file called &
or, more likely, to give an error as it does for other cases:
$ echo "foo" >&
bash: syntax error near unexpected token `newline'
Instead, it seems to work in exactly the same way as the former, a gedit
window appears and no error message is printed.
I should also note that this is shell specific:
bash
(4.2.45(1)-release),zsh
(5.0.2),csh
(deb package version: 20110502-2) andtcsh
(6.18.01) : works as described above, no error message, no files created.dash
(0.5.7-3):$ nohup gedit >& /dev/null & $ dash: 2: Syntax error: Bad fd number
ksh
(93u+ 2012-08-01): fails, but a process is apparently started (1223
) though nogedit
window appears:$ 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 & ^
So, why does this command simply run with no errors (and no output file created) in some shells and fail in others? What is the >&
doing in the apparently special case of nohup
? I am guessing that >& /dev/null
is being interpreted as >&/dev/null
but why isn't the space causing an error in these shells?
dash
. – cuonglm Mar 05 '14 at 19:49nohup command
, run independent tty your application.According to my memory,dash
extended ofash
,Debian ash
,ash
developed byOpenBSD
and it's limited shell,even maemo OS(Debian Base on n900 mobile) uses dash,ash
family shell have limited usage expect of bash or tcsh. – PersianGulf Mar 05 '14 at 19:50dash
to print its version out but the package is0.5.7-3
, what's yours? Also, are you sure you're runningdash
? That's Ubuntu's defaultsh
isn't it? – terdon Mar 05 '14 at 19:54nohup
does, my question is why the>&
seems to work with nohup alone in some shells. – terdon Mar 05 '14 at 19:55bash
as default shell. But I haved switched todash
before running this command. – cuonglm Mar 05 '14 at 20:21$ jobs [1]+ Running nohup gedit &>/dev/null &
– X Tian Mar 05 '14 at 20:43>&
,&>
is just shorthand for2>&1 >
so of course it works. I think that the shells where this works are simply ignoring the space between the>&
and/dev/null
,>&
means redirect to the file descriptor that follows,>&2
means redirect to stderr for example. – terdon Mar 05 '14 at 20:46