использование </ dev / null & в командной строке

12

Я попытался запустить пример Java-программы, используя следующую командную строку. Однако я не знаю, для чего используется задняя часть < /dev/null &?

java   -cp  /home/weka.jar weka.classifiers.trees.J48 t train_file  >& log < /dev/null &
user297850
источник

Ответы:

21

< /dev/nullиспользуется для мгновенной отправки EOF в программу, чтобы она не ожидала ввода ( /dev/nullнулевое устройство - это специальный файл, который отбрасывает все записанные в него данные, но сообщает, что операция записи выполнена успешно, и не предоставляет никаких данных любой процесс, который читает из него, немедленно получая EOF). &это специальный тип разделителя команд, используемый для фона предыдущего процесса.

Не зная вызываемой программы, я не знаю напрямую, почему требуется запускать ее таким образом.

Крис Даун
источник
6

</dev/nullотключает вход программы от терминала. Некоторые программы реагируют по-разному в зависимости от того, к чему подключен их стандартный вход. С помощью перенаправления </dev/nullпрограмма может сказать, что ее ввод не поступает от терминала, и сразу же получит указание конца файла, если попытается прочитать со своего стандартного ввода.

Одиночество &в конце заставляет программу выполняться в фоновом режиме. Это означает, что вы сразу получите запрос оболочки. Без &, вы получите приглашение оболочки только тогда, когда программа завершит выполнение.

Обратите внимание, что автономный не &имеет отношения к >&. >&является оператором перенаправления (в tcsh, bash и zsh), который перенаправляет как стандартный вывод программы, так и стандартную ошибку программы на имя файла, указанное после оператора (здесь log).

Другими словами, что делает оболочка, когда видит эту командную строку:

  • Запустите процесс в фоновом режиме. В фоновом процессе:
    • Подключите стандартный вход /dev/null( нулевое устройство ).
    • Подключите как стандартный вывод, так и стандартную ошибку к вызываемому файлу log(создавая файл, если он еще не существует, и обрезая его, если он существует).
    • Ищите исполняемый файл с именем javaв $PATH.
    • Выполнить этот файл с 5 аргументов -cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`.
Жиль "ТАК - прекрати быть злым"
источник