En bash, estándar (1) y error (2) de salida puede ser re-dirigido y desechados con:

>/dev/null 2>&1

Pero el ejemplo siguiente se hace algo diferente:

nohup myscript.sh >myscript.log 2>&1 </dev/null &

¿Cuál es el significado o la función de </dev/null en el ejemplo anterior? En qué tipo de secuencias de comandos escenario sería útil?

(Fuente De Ejemplo)

  • Los procesos no pueden ser separadas si tienen conexiones con el local TTY. Esto reemplaza FD 0, stdin, con un mango en /dev/null.
InformationsquelleAutor nmax | 2013-11-13

4 Comentarios

  1. 34

    Redirigir /dev/null a stdin va a dar una inmediata EOF a cualquier lectura llamada de ese proceso. Este es normalmente útil para separar un proceso desde una tty (este proceso es llamado un demonio). Por ejemplo, cuando se inicia un proceso en segundo plano de forma remota a través de ssh, que debe redirigir la entrada estándar stdin para evitar que el proceso de espera para la entrada del local.

    Otra razón para redirigir a /dev/null es para prevenir un sin usar descriptor de archivo que se crea para stdin. Esto puede minimizar el total de los identificadores de archivos abiertos cuando tienes muchos procesos de larga ejecución.

  2. 27

    </dev/null se utiliza para evitar la secuencia de comandos de espera para la entrada.

    Citando el uso de < /dev/null & en la línea de comandos:

    < /dev/null se utiliza para enviar instantáneamente EF para el programa, de modo que
    no espere a que la entrada (/dev/null, el dispositivo nulo, es un especial
    archivo que descarta todos los datos escritos, pero los informes de que la escritura
    la operación tuvo éxito, y no proporciona datos para cualquier proceso que lee
    a partir de ella, produciendo EF inmediatamente). & es un tipo especial de comando
    separador utilizado a fondo el proceso anterior.

    Por lo que el comando:

    nohup myscript.sh >myscript.log 2>&1 </dev/null &
    # |               ^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^
    # |                    |           |      |     run in background
    # |                    |           |      |     
    # |                    |           |   don't expect input
    # |                    |           |   
    # |                    |           redirect stderr to stdout
    # |                    |           
    # |                    redirect stdout to myscript.log
    # |
    # keep running the command no matter the connection is lost or you logout

    va a pasar a segundo plano el comando de imprimir tanto stdout y stderr a myscript.log sin esperar ninguna entrada.

    • La ilustración es muy útil, gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here