використання </ dev / null & у командному рядку


12

Я спробував запустити приклад програми java, використовуючи наступний командний рядок. Однак я не знаю, для чого використовується задня частина < /dev/null &?

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

Відповіді:


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`.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.