l'uso di </ dev / null & nella riga di comando


12

Ho provato a eseguire un programma java di esempio utilizzando la seguente riga di comando. Tuttavia, non so a cosa serve la parte finale < /dev/null &?

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

Risposte:


21

< /dev/nullviene utilizzato per inviare istantaneamente EOF al programma, in modo che non attenda l'input ( /dev/null, il dispositivo null, è un file speciale che scarta tutti i dati scritti su di esso, ma segnala che l'operazione di scrittura è riuscita e non fornisce dati a qualsiasi processo che legge da esso, producendo immediatamente EOF). &è un tipo speciale di separatore di comandi utilizzato per eseguire il background del processo precedente.

Senza conoscere il programma chiamato, non so direttamente perché sia ​​necessario eseguirlo in questo modo.


6

</dev/nulldisconnette l'ingresso del programma dal terminale. Alcuni programmi reagiscono in modo diverso a seconda dell'ingresso standard a cui sono collegati. Con il reindirizzamento </dev/null, il programma può dire che il suo input non proviene da un terminale e riceverà immediatamente un'indicazione di fine file se tenta di leggere dal suo input standard.

Il solo &alla fine fa eseguire il programma in background. Ciò significa che ricevi immediatamente un prompt della shell. Senza il comando &, si otterrebbe un prompt della shell solo al termine dell'esecuzione del programma.

Si noti che lo standalone &non è correlato a >&. >&è un operatore di reindirizzamento (in tcsh, bash e zsh) che reindirizza sia l'output standard del programma sia l'errore standard del programma sul nome file specificato dopo l'operatore (qui log).

In altre parole, ciò che fa la shell quando vede questa riga di comando è:

  • Avvia un processo in background. Nel processo in background:
    • Collegare l'input standard a /dev/null(il dispositivo null ).
    • Collegare sia l'output standard che l'errore standard al file chiamato log(creando il file se non esiste ancora e troncandolo se esiste).
    • Cerca un file eseguibile chiamato javain $PATH.
    • Esegui il file con i 5 argomenti -cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.