Перенаправление ввода-вывода используется в сценариях оболочки. Эта функция позволяет взять вывод команды и перенаправить его как вход для другой команды, или команда может взять вход из файла вместо от стандартного входного потока или от терминала. Целый процесс помогает соединить потоки данных различными способами.
Одной из важных функций оболочек является способность соединить команды. Например, можно взять вывод команды и перенаправить его как вход для другой команды. Или команда может взять вход из файла вместо клавиатуры. Целый процесс выполняется перенаправление ввода/вывода мысли и каналы.
Определенный синтаксис для перенаправления ввода-вывода зависит от оболочки, которую Вы используете.
Каждая команда или программа, выполненная оболочкой, имеют 3 потока данных, связанные с ним:
stdin
, с дескриптором файла 0
) – где команды получают свой вход от (по умолчанию, ввод с клавиатуры, обеспеченный терминалом).stdout
, дескриптор файла 1
) – куда команды отправляют свой вывод (по умолчанию, дисплей терминала).stderr
, дескриптор файла 2
) – куда команды отправляют свои сообщения об ошибках и предупреждающие сообщения (по умолчанию, дисплей терминала).По умолчанию, stdin
клавиатура и где команда обычно берет свой вход, stdout
куда команда отправляет свой вывод и stderr
место, где ошибки печатаются.
Перенаправление ввода-вывода позволяет оболочке управлять этими дескрипторами файлов. Случай общего использования является перенаправлением стандартного вывода команды в другой файл. Сингл >
оператор усекает файл для обнуления длины и затем перезаписывает файл с выводом команды:
# Redirecting the output of ls command to a file $ ls -lt > file_ls.txt
Два больших - чем знаки (>>
) добавьте в файл, не усекая его:
$ ./script >> log_file.txt
Оба stdout
и stderr
может быть перенаправлен в тот же файл:
# Append the output in commands.log and send the error(2) # where it points the stdout(&1) $ ls -yz >> commands.log 2>&1
Меньше подписываются (<
) используется для перенаправления ввода:
$ cat < input_file.txt
Некоторые команды, например, ls
, не берите вход, таким образом, любой вход, перенаправленный к таким командам, проигнорирован (не считанный программой).
Команда может иметь оба входных и выходных перенаправления одновременно:
$ ./script < input_file > output.log