Подтвердить что ты не робот

Что такое</dev/null в bash?

В bash вывод стандартного (1) и ошибки (2) может быть перенаправлен и отброшен с помощью:

>/dev/null 2>&1

Но следующий пример делает что-то другое:

nohup myscript.sh >myscript.log 2>&1 </dev/null &

Что означает значение/функция </dev/null в приведенном выше примере? В каком сценарии сценариев это будет полезно?

(Пример источника)

4b9b3361

Ответ 1

Перенаправление /dev/null в stdin даст немедленный EOF для любого прочитанного вызова из этого процесса. Это обычно полезно для отсоединения процесса от tty (такой процесс называется демонами). Например, при удаленном удалении фонового процесса по ssh вы должны перенаправить stdin, чтобы предотвратить процесс, ожидающий локального ввода.

Другой причиной перенаправления на /dev/null является предотвращение создания неиспользуемого дескриптора файла для stdin. Это может минимизировать общие дескрипторы открытых файлов, когда у вас много длительных процессов.

Ответ 2

</dev/null используется, чтобы избежать ожидания script для ввода.

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

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

Итак, команда:

nohup myscript.sh >myscript.log 2>&1 </dev/null &
# |               ^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^
# |                    |           |      |     run in background
# |                    |           |      |     
# |                    |           |   don't expect input
# |                    |           |   
# |                    |           redirect stderr to stdout
# |                    |           
# |                    redirect stdout to myscript.log
# |
# keep running the command no matter the connection is lost or you logout

переместит на задний план команду, выводя как stdout, так и stderr в myscript.log, не дожидаясь ввода.

Ответ 3

</dev/null предоставляет пустой вход для script...

Ответ 4

Это способ закрыть stdin, как если бы EOF (^D) были отправлены на него. Его можно использовать в этом примере с помощью команды mail, чтобы показать, что команда больше не должна ожидать ввода от stdin.

Он также часто используется для демонстрации процессов (Stop 6 of рекомендуемый подход для создания хороших демонов)