< /dev/null
est utilisé pour envoyer instantanément EOF au programme, afin qu'il n'attende pas d'entrée (/dev/null
, le périphérique nul, est un fichier spécial qui supprime toutes les données qui y sont écrites, mais signale que l'opération d'écriture a réussi et ne fournit aucune donnée à aucun processus qui lit à partir de celui-ci, produisant immédiatement EOF). &
est un type spécial de séparateur de commandes utilisé pour mettre en arrière-plan le processus précédent.
Sans connaître le programme appelé, je ne sais pas directement pourquoi il est nécessaire de l'exécuter de cette manière.
</dev/null
déconnecte l'entrée du programme du terminal. Certains programmes réagissent différemment selon ce à quoi leur entrée standard est connectée. Avec la redirection </dev/null
, le programme peut dire que son entrée ne provient pas d'un terminal et recevra immédiatement une indication de fin de fichier s'il essaie de lire à partir de son entrée standard.
Le seul &
à la fin provoque l'exécution du programme en arrière-plan. Cela signifie que vous obtenez immédiatement une invite du shell. Sans le &
, vous ne recevriez une invite du shell que lorsque le programme aurait fini de s'exécuter.
Notez que le &
autonome n'est pas lié à >&
. >&
est un opérateur de redirection (dans tcsh, bash et zsh) qui redirige à la fois la sortie standard du programme et l'erreur standard du programme vers le nom de fichier spécifié après l'opérateur (ici log
).
En d'autres termes, ce que fait le shell lorsqu'il voit cette ligne de commande est :
- Démarrez un processus en arrière-plan. Dans le processus d'arrière-plan :
- Connecter l'entrée standard à
/dev/null
(le périphérique nul). - Connectez à la fois la sortie standard et l'erreur standard au fichier appelé
log
(créer le fichier s'il n'existe pas encore, et le tronquer s'il existe). - Recherchez un fichier exécutable appelé
java
dans le$PATH
. - Exécutez ce fichier avec les 5 arguments
-cp
,/home/weka.jar
,weka.classifiers.trees.J48
,–t
, train_file`.
- Connecter l'entrée standard à