Edité una respuesta en Ask Ubuntu que sugería lo siguiente
nohup gedit >& /dev/null &
Cuando realmente querían decir
nohup gedit &> /dev/null &
Este último redirige correctamente stderr y stdout a /dev/null
. Esperaba que el primero creara un archivo llamado &
o, más probablemente, diera un error como lo hace para otros casos:
$ echo "foo" >&
bash: syntax error near unexpected token `newline'
En cambio, parece funcionar exactamente de la misma manera que la primera, gedit
aparece una ventana y no se imprime ningún mensaje de error.
También debo tener en cuenta que esto es específico del shell:
bash
(4.2.45 (1) -release),zsh
(5.0.2),csh
(versión del paquete deb: 20110502-2) ytcsh
(6.18.01): funciona como se describe anteriormente, sin mensaje de error, sin archivos creados.dash
(0.5.7-3):$ nohup gedit >& /dev/null & $ dash: 2: Syntax error: Bad fd number
ksh
(93u + 2012-08-01): falla, pero aparentemente se inicia un proceso (1223
) aunque nogedit
aparece ninguna ventana:$ 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 & ^
Entonces, ¿por qué este comando simplemente se ejecuta sin errores (y sin archivos de salida creados) en algunos shells y falla en otros? ¿Qué está >&
haciendo en el caso aparentemente especial de nohup
? Supongo que >& /dev/null
se está interpretando, >&/dev/null
pero ¿por qué el espacio no está causando un error en estos depósitos?
fuente
dash
.nohup command
, Ejecute TTY independiente de su application.According a mi memoria,dash
extendida deash
,Debian ash
,ash
desarrollado porOpenBSD
y es la cáscara limitada, incluso sistema operativo Maemo (base de Debian en n900 móvil) utiliza el tablero,ash
la cáscara de la familia tiene un uso limitado de esperar bash o tcsh.dash
que imprima su versión, pero el paquete es0.5.7-3
, ¿cuál es el tuyo? Además, ¿estás seguro de que estás corriendodash
? Ese es el valor predeterminado de Ubuntu,sh
¿no?nohup
hace, mi pregunta es por qué>&
parece funcionar con nohup solo en algunos proyectiles.Respuestas:
es la sintaxis POSIX y es lo mismo que:
Eso se ejecuta
nohup gedit
en segundo plano y luego realiza una> /dev/null
redirección sin ejecutar un comando.no es la sintaxis POSIX y es la
csh
forma de redirigir stdout y stderr a / dev / null.csh
no tiene el2>&1
operador como se encuentra en Bourne, por lo que es la única formacsh
de redirigir stderr.zsh
(tan a menudo) también proporciona lacsh
sintaxis, pero también admite el operador dex>&y
duplicación fd del shell Bourne, lo que significa que hay un conflicto allí.redirecciona
ls
stdout y stderr afile
, pero si el archivo es2
, tienes un problema comosignifica redireccionar stdout al recurso al que apunta fd 2 (
dup(2, 1)
). Entonces necesitas escribirlo:si desea redirigir tanto stdout como stderr de
ls
a un archivo llamado2
en el directorio actual; o use la sintaxis estándar.bash
inicialmente no entendía>&
, pero introdujo al&>
operador en su lugar para eso, rompiendo el cumplimiento de POSIX en el proceso (aunque es poco probable que use un scriptcmd &> xxx
).ksh
Copié ese operador en ksh93t + en 2009, mksh en R35 en 2008 (desactivado enposix
modo) pero no>&
.bash
Soporte adicional para>&
en 2.05.busybox
sh
agregó soporte para ambos&>
y>&
en 1.13 (2008).Ni
>&
tampoco&>
en el sentido de la salida estándar de redirección y stderr son POSIX / Bourne.Si desea redirigir tanto stdout como stderr de forma portátil, la sintaxis es
fuente
POSIX/Bourne
por "Bourne"?