Оболочка управляет вводом и выводом запускаемых команд. Обычно, выделяют три потока данных это ввод, вывод и поток ошибок (stdin, stdout, stderr).
По умолчанию, оболочка направляет стандартный вывод на экран. Например, при использовании команды grep на файл, который содержит, какие-то данные, результат будет выведен на экран.
$ grep alias file.txt
alias - make alias for command
Перенаправление вывода команды в другую команду.
Для перенаправления потока вывода с одной команды в другой в оболочке используется вертикальная черта ‘|’. Например, чтобы отсортировать строки в нашем файле в алфавитном порядке, можем перенаправить вывод команды cat в команду sort.
$ cat file.txt | sort
alias - make alias for command
Linux commands
man - manual
whatis - whatis command if you want yo know
Перенаправление вывода команды в файл.
Для перенаправления вывода команды в файл, используется функция оболочки, называемая перенаправлением вывода (output rederection). Просто добавьте символ «>» с именем файла, в который будет перенаправлен вывод:
$ grep alias file.txt > alias.txt (на экране ничего)
$ cat alias.txt
alias - make alias for command
Весь вывод был направлен в файл alias.txt. Если файла куда перенаправляется поток не существует, то он будет создан. Если же он есть, то его содержимое будет перезаписано.
Для того, чтобы добавлять данные в файл вместо того, чтобы перезаписывать его каждый раз, используйте символ «>>«.
$ echo Some text >> alias.txt
$ cat alias.txt
alias - make alias for command
Some text
Перенаправление ввода.
Кроме перенаправление вывода, есть возможность перенаправления ввода (input redirection), обеспечивающее стандартный ввод из файла, а не, например, с клавиатуры или сканера. Для такого перенаправления используется символ «<» и имя файла, чтобы перенаправить стандартный ввод.
Возьмем к примеру команду wc, которая подсчитывает количество строк, слов и символов в файле. И передадим ей на ввод наш файл
$ wc alias.txt
2 8 41 alias.txt
$ wc < alias.txt
2 8 41
Важным отличием поведения этих двух выводов команд, является то, что в первом случае команда wc получает в качестве аргумента имя файла. Поэтому она находит, открывает и читает содержимое файла на диске. А вот во втором случае команда wc открывается без аргументов, поэтому они считываются со стандартного ввода. Это равносильно тому, что вы просто запустите команду и введете весь текст файла с клавиатуры.
Перенаправление потока ошибок.
Некоторые сообщения, которые мы видим на экране в результате выполнения команд, нельзя перенаправить с помощью «>«. Например, выполним какую-нибудь операцию с несуществующим файлом
$ ls nofile.txt
ls: невозможно получить доступ к 'nofile.txt': Нет такого файла или каталога
Если мы перенаправим это сообщение с помощью стандартного оператора «>«, то сообщение все равно будет выведено на экран. А файл errors все равно останется пустым.
$ ls nofile.txt>errors
ls: невозможно получить доступ к 'nofile.txt': Нет такого файла или каталога
$ cat errors
Команды Linux могут создавать более одного потока вывода. Так вот в дополнению к потоку вывода есть еще и поток вывода ошибок (stderr). Этот поток обычно зарезервирован для сообщений об ошибках. Хоть и попадалось как-то, когда вывод версии приложения отправлялся именно в этот поток.
Оба потока — stdout и stderr на экране одинаково, но по своей сути они разные. И для того, чтобы перенаправить поток ошибок можно с помощью символов «2>«.
$ ls nofile.txt 2> errors
$ cat errors
ls: невозможно получить доступ к 'nofile.txt': Нет такого файла или каталога
Либо вариант с записью сообщений об ошибках в конец файла: «2>>«.
$ ls nofile.txt 2>> errors
$ cat errors
ls: невозможно получить доступ к 'nofile.txt': Нет такого файла или каталога
ls: невозможно получить доступ к 'nofile.txt': Нет такого файла или каталога
А еще можно перенаправить все потоки вывода одним оператором «&>«.
$ echo Этот файл существует > goodfile.txt
$ cat goodfile.txt nofile.txt &> allout
$ cat allout
Этот файл существует
cat: nofile.txt: Нет такого файла или каталога
Was this helpful?
0 / 0