el uso de </ dev / null & en la línea de comando

12

Traté de ejecutar un programa Java de ejemplo usando la siguiente línea de comando. Sin embargo, no sé para qué se < /dev/null &utiliza la parte posterior .

java   -cp  /home/weka.jar weka.classifiers.trees.J48 t train_file  >& log < /dev/null &
usuario297850
fuente

Respuestas:

21

< /dev/nullse utiliza para enviar instantáneamente EOF al programa, de modo que no espere entrada ( /dev/nullel dispositivo nulo es un archivo especial que descarta todos los datos escritos en él, pero informa que la operación de escritura se realizó correctamente y no proporciona datos para cualquier proceso que lea de él, produciendo EOF inmediatamente). &es un tipo especial de separador de comandos que se utiliza para poner en segundo plano el proceso anterior

Sin conocer el programa al que se llama, no sé directamente por qué es necesario ejecutarlo de esta manera.

Chris Down
fuente
6

</dev/nulldesconecta la entrada del programa del terminal. Algunos programas reaccionan de manera diferente según a qué esté conectada su entrada estándar. Con la redirección </dev/null, el programa puede decir que su entrada no proviene de un terminal y recibirá una indicación de fin de archivo inmediatamente si intenta leer desde su entrada estándar.

El solitario &al final hace que el programa se ejecute en segundo plano. Esto significa que recibirá un aviso de shell de inmediato. Sin el &, obtendría un indicador de shell solo cuando el programa termine de ejecutarse.

Tenga en cuenta que el independiente &no está relacionado con >&. >&es un operador de redirección (en tcsh, bash y zsh) que redirige tanto la salida estándar del programa como el error estándar del programa al nombre de archivo especificado después del operador (aquí log).

En otras palabras, lo que hace el shell cuando ve esta línea de comando es:

  • Comience un proceso en segundo plano. En el proceso de fondo:
    • Conecte la entrada estándar a /dev/null(el dispositivo nulo ).
    • Conecte tanto la salida estándar como el error estándar al archivo llamado log(creando el archivo si aún no existe y truncándolo si existe).
    • Busque un archivo ejecutable llamado javaen el $PATH.
    • Ejecutar ese archivo con los 5 argumentos -cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`.
Gilles 'SO- deja de ser malvado'
fuente