English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Большинство команд UNIX системы принимают ввод с вашего терминала и отправляют созданный вывод обратно в ваш терминал. Команда обычно читает ввод из места, называемого стандартным вводом, по умолчанию это ваш терминал. Точно так же команда обычно записывает вывод в стандартный вывод, по умолчанию это также ваш терминал.
Список команд перенаправления:
Команда | Объяснение |
---|---|
command > file | Вывод будет перенаправлен в файл. |
command < file | Вход будет перенаправлен в файл. |
command >> file | Вывод будет перенаправлен в файл с помощью метода добавления. |
n > file | Файл с описателем файла n будет перенаправлен в файл. |
n >> file | Файл с описателем файла n будет перенаправлен в файл с помощью метода добавления. |
n >& m | Объедините выходные файлы m и n. |
n <& m | Объедините входные файлы m и n. |
<< tag | Используйте содержимое между началом метки tag и концом метки tag в качестве ввода. |
需要注意的是, файловый дескриптор 0 обычно является стандартным вводом (STDIN), 1 - стандартным выводом (STDOUT), 2 - стандартным выводом ошибок (STDERR).
Перенаправление выполняется, вставляя специфические символы между командами. Специфические символы имеют следующий синтаксис:
command1 > file1
Эта команда выполняет command1 и сохраняет результат в file1.
Внимание: содержимое file1, уже существующее, будет overwritten новым содержимым. Если вы хотите добавить новый контент в конец файла, используйте оператор >>.
Выполните следующую команду who, которая перенаправит полный вывод команды в файл users (users):
$ who > users
После выполнения команды, информация не выводится в терминал, потому что вывод был перенаправлен в указанный файл.
Вы можете использовать команду cat, чтобы просмотреть содержимое файла:
$ cat users _mbsetupuser console Oct 31 17:35 tianqixin console Oct 31 17:35 tianqixin ttys000 Dec 1 11:33
Перенаправление вывода будет overwrite содержимое файла, см. следующий пример:
$ echo "Сайт основного руководства: ru.oldtoolbag.com" > users $ cat users Сайт основного руководства: ru.oldtoolbag.com $
Если вы не хотите, чтобы содержимое файла было overwritten, вы можете использовать '>>', чтобы добавить к концу файла, например:
$ echo "Сайт основного руководства: ru.oldtoolbag.com" >> users $ cat users Сайт основного руководства: ru.oldtoolbag.com Сайт основного руководства: ru.oldtoolbag.com $
Как и перенаправление вывода, Unix-команды также могут получать ввод из файла, синтаксис следующий:
command1 < file1
Таким образом, команда, которая обычно требует ввода с клавиатуры, будет перенаправлена на чтение из файла.
Внимание: перенаправление вывода выполняется с помощью знака '>', а перенаправление ввода - с помощью знака '<'.
Продолжая примеры выше, нам нужно посчитать количество строк в файле users, для этого выполните следующую команду:
$ wc -l users 2 users
Ввод можно также перенаправить в файл users:
$ wc -l < users 2
Внимание: результаты первых двух примеров различаются: в первом примере выводится имя файла; во втором нет, потому что он знает только о чтении содержимого из стандартного ввода.
command1 < infile > outfile
Одновременно заменять ввод и вывод, выполнять command1, читать содержимое из файла infile и затем写入 вывод в outfile.
В общем случае, при выполнении каждого Unix/Linux-команды открываются три файла:
Стандартный файл ввода (stdin):Файловый дескриптор stdin равен 0, Unix-программы по умолчанию читают данные из stdin.
Стандартный файл вывода (stdout):Файловый дескриптор stdout равен 1, Unix-программы по умолчанию отправляют данные в stdout.
Стандартный файл ошибок (stderr):Файловый дескриптор stderr равен 2, Unix-программы пишут ошибки в поток stderr.
По умолчанию, command > file перенаправляет stdout в file, command < file перенаправляет stdin в file.
Если нужно перенаправить stderr в файл, можно написать так:
$ command 2>file
Если нужно добавить stderr в конец файла file, можно написать так:
$ command 2>>file
2 Это означает стандартный файл ошибок (stderr).
Если нужно перенаправить stdout и stderr в файл, можно написать так:
$ command > file 2>&1 или $ command >> file 2>&1
Если нужно перенаправить stdin и stdout, можно написать так:
$ command < file1 >file2
Команда command перенаправляет stdin в file1, а stdout в file2.
Here Document — это особый способ перенаправления ввода в Shell, который используется для перенаправления ввода в интерактивный скрипт или программу Shell.
Его базовая форма выглядит следующим образом:
command << delimiter document delimiter
Его действие заключается в передаче содержимого (document) между двумя delimiter в качестве входных данных для команды.
Внимание:
delimiter в конце должен быть выровнен по левому краю, перед ним не должно быть ни одного символа, ни после него, включая пробелы и отступы tab.
Пропускуются пробельные символы перед и после delimiter.
В командной строке можно вычислить количество строк Here Document с помощью команды wc -l:
$ wc -l << EOF Добро пожаловать Сайт основного учебника ru.oldtoolbag.com EOF 3 # Результат вывода 3 строки $
Мы также можем использовать Here Document в скриптах, например:
#!/bin/bash # author:Сайт основного учебника # url:ru.oldtoolbag.com cat << EOF Добро пожаловать Сайт основного учебника ru.oldtoolbag.com EOF
Исполнение вышеуказанного скрипта, результат вывода:
Добро пожаловать Сайт основного учебника ru.oldtoolbag.com
Если вы хотите выполнить команду, но не хотите, чтобы结果显示ался на экране, можно перенаправить вывод в /dev/null:
$ command > /dev/null
/dev/null - это специальный файл, в который写入的内容 всегда丢弃аются; если пытаться прочитать из этого файла, то не будет получено ничего. Но файл /dev/null очень полезен, так как перенаправление команд в него создает эффект "запрета вывода".
Если вы хотите скрыть stdout и stderr, можно написать так:
$ command > /dev/null 2>&1
Внимание:0 - это стандартный ввод (STDIN), 1 - стандартный вывод (STDOUT), 2 - стандартный вывод ошибок (STDERR).
здесь 2 и > между ними не должно быть пробелов,2> Ошибка вывода отображается только когда они являются единым целым.