Що означає "</ dev / null"?


16

Я розумію, що > /dev/nullпереспрямовує речі, до /dev/nullяких діє як чорна криниця. Однак я не розумію, що < /dev/nullозначає. Я бачив такий сценарій, написаний так:

nohup myprogram > foo.out 2> foo.err < /dev/null &

Отже, що означає < /dev/nullкод вище?

ось приклад, де це пропонується


Відповіді:


19

Це забезпечує, що всі потоки вводу / виводу обліковуються / займаються.

Таким чином, фоновий процес не має нічого "прив'язаного" до терміналу, тому ви можете займатися своїм бізнесом, не намагаючись програму прочитати програму TTY, що призведе до зависання терміналу.

У цьому випадку, оскільки ви запускаєте процес над ssh із скрипту оболонки, то переконайтеся, що сценарій може рухатись без набору.


Чи припускає, що мійпрограма займає деякий вхід, але в цьому випадку моя програма не подає нічого як вхід?
Qian Chen

Спасибі. Я розумію все решта, крім < /dev/null.
Qian Chen

То яка різниця між кодом і тим самим кодом без < /dev/null?
Qian Chen

Я фактично читаю код звідси: stackoverflow.com/questions/29142/…
Qian Chen

2
рада, що допомогло! вибачте за побіг; контекст допоміг, хоча, дякую! - бічне зауваження: я видаляю купу моїх коментарів через хвилину-дві, тепер, коли все прибито, це виглядає заплутаним для всіх, хто бачить це
user3276552

12

program </dev/nullозначає, що programаргумент бере свій вхідний аргумент (може бути вхідним параметром до опції або може бути вхідним файлом для роботи) через дескриптор файлу 0, тобто STDIN, з файлу /dev/null.

Як ви вже знаєте, /dev/nullнічого не містить, він повідомляє EOF (Кінець файлу) після читання, тому будь-яка програма, яка приймає вхід /dev/null, в основному нічого не перенаправить як вхідний аргумент.


Так чи є різниця просто залишитись < /dev/null? Просто напишіть це якnohup myprogram > foo.out 2> foo.err &
Qian Chen

1
@ElgsQianChen Це залежить від вашого program.. що він хоче, як STDIN? Деякі програми можуть зробити це обов'язковим, тому вам потрібно поставити щось як STDIN, це може бути так, що ви просто використовували /dev/nullяк STDIN і дозволяєте програмі виконувати обробку і поміщати STDOUT і STDERR у згадані файли ..
heemayl

Тож чи ефективно запобігає блокуванню будь-якого входу і просто нічого не подавати на будь-який запит введення?
Qian Chen

1
@ElgsQianChen Він заблокує дескриптор файлу 0, тобто STDIN, тому ви більше не можете передавати вхід через це. Якщо немає іншого FD, налаштованого приймати вхід, ви не зможете надати додаткового введення в програму ..
heemayl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.