Все это прекрасно, но при чем здесь стандартный ввод? Пока ни при чем, но давайте попробуем кое-что еще. Что получится, если вызвать cat без аргументов?
[me@linuxbox ~]$ cat
Ничего не произошло — такое ощущение, что команда зависла. Однако в действительности команда делает именно то, что и предполагалось.
Если вызвать cat без аргументов, она начнет читать данные со стандартного ввода, а поскольку стандартный ввод по умолчанию подключен к клавиатуре, получается, что команда ждет, пока вы что-нибудь напечатаете!
Попробуйте так:
[me@linuxbox ~]$ cat
Съешь ещё этих мягких французских булок, да выпей чаю.
Затем нажмите комбинацию CTRL-D (то есть, удерживая нажатой клавишу CTRL, нажмите клавишу D), чтобы сообщить команде cat, что достигнут
[me@linuxbox ~]$ cat
Съешь ещё этих мягких французских булок, да выпей чаю.
Съешь ещё этих мягких французских булок, да выпей чаю.
В отсутствие аргументов с именами файлов cat копирует содержимое стандартного ввода в стандартный вывод, поэтому-то мы и увидели, как она повторила введенную нами строку. Эту ее особенность можно использовать для создания коротких текстовых файлов. Представьте, что вам потребовалось создать файл с именем
[me@linuxbox ~]$ cat > eat_more.txt
Съешь ещё этих мягких французских булок, да выпей чаю.
Введите команду, затем текст, который нужно поместить в файл, и не забудьте нажать комбинацию CTRL-D в конце. Используя командную строку, мы реализовали самый простой в мире текстовый процессор! Чтобы увидеть результат, воспользуемся командой cat и скопируем файл в стандартный вывод:
[me@linuxbox ~]$ cat eat_more.txt
Съешь ещё этих мягких французских булок, да выпей чаю.
Теперь, когда мы знаем, что команда cat может принимать данные не только из файлов, указанных в аргументах, но и со стандартного ввода, попробуем выполнить перенаправление стандартного ввода:
[me@linuxbox ~]$ cat < eat_more.txt
Съешь ещё этих мягких французских булок, да выпей чаю.
Используя оператор перенаправления <, мы изменили источник данных для стандартного ввода с клавиатуры на файл
Прежде чем двинуться дальше, прочитайте страницу справочного руководства (man) для команды cat, так как она имеет несколько очень интересных параметров.
Конвейеры
«Умение» команд читать данные со стандартного ввода и выводить результаты в стандартный вывод используется механизмом командной оболочки, который называется
Для демонстрации этого механизма нам понадобится несколько команд. Мы уже упоминали команду, которая может получать данные со стандартного ввода. Это команда less. Теперь используем less для постраничного отображения вывода любой команды, которая посылает свои результаты в стандартный вывод:
[me@linuxbox ~]$ ls -l /usr/bin | less
Это очень удобно! С помощью этого приема можно со всем комфортом исследовать вывод любой команды, посылающей результаты на стандартный вывод.
Фильтры
Конвейеры часто используются для выполнения сложных операций с данными. Они позволяют объединить вместе несколько команд. Часто команды, используемые таким способом, называют
[me@linuxbox ~]$ ls /bin /usr/bin | sort | less
Поскольку в команде указаны два каталога (
uniq — поиск или удаление повторяющихся строк