< /dev/null
se utiliza para enviar instantáneamente EOF al programa, de modo que no espere la entrada (/dev/null
, el dispositivo nulo, es un archivo especial que descarta todos los datos escritos en él, pero informa que la operación de escritura tuvo éxito y no proporciona datos a ningún proceso que lo lea, lo que produce EOF inmediatamente). &
es un tipo especial de separador de comandos que se usa 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.
</dev/null
desconecta la entrada del programa de la 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 una 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 obtendrá un aviso de shell de inmediato. Sin el &
, obtendrá un aviso 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:
- Inicie 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
(crear el archivo si aún no existe y truncarlo si existe). - Busque un archivo ejecutable llamado
java
en el$PATH
. - Ejecute ese archivo con los 5 argumentos
-cp
,/home/weka.jar
,weka.classifiers.trees.J48
,–t
, tren_archivo`.
- Conecte la entrada estándar a