Bash предоставляет возможность перенаправления потоков ввода и вывода. Что это означает?
Стандартный ввод подразумевает данные, которые вводятся с клавиатуры. Экран монитора используется для стандартного вывода. Другими словами, в командной строке Bash ввод данных осуществляется с клавиатуры. Если команда требует текстового вывода, Bash отображает данные на экране.
Однако, подобное поведение можно изменить. Например, данные можно получать не с клавиатуры, а из файла. Точно так же, их можно выводить не на экран, а в файл.
Представим, что мы хотим, оставшись в текстовом режиме терминала, записать заметку в файл. Для этого нет необходимости
использовать консольный текстовый редактор. Это можно сделать при помощи программы cat
,
направив ее вывод в файл. Напомним, что без аргументов cat работает в интерактивном режиме, выводя на экран все
вводимые данные.
В Bash используется символ больше ">" для обозначения перенаправления стандартного потока вывода в файл. Это значит, что cat, по умолчанию выводящий информацию на экран, теперь выводит ее в файл, и на экране будут отображаться только вводимые строки.
Пусть теперь мы хотим дополнить заметку сегодняшней датой, для этого перенаправим вывод команды date в тот же файл.
Двойной символ больше ">>" также используется для перенаправления вывода, но при этом данные добавляются в конец файла, если он уже существует. В противном случае, использование только одного символа "больше" перезаписало бы файл.
На изображении выше, команда cat note.txt
служит для чтения файла. Это означает, что если в cat
передать аргумент, она больше не будет работать в интерактивном режиме, а прочитает данные из указанного файла
и выведет их на экран. Фактически это эквивалентно cat < note.txt, где символ меньше "<" указывает на
перенаправление ввода.
Можно было бы предположить, что команда ls, которая отображает содержимое каталога, при передаче файла с адресом каталога, выведет его содержимое. Но это не так.
Такой способ перенаправления не работает. В тех случаях, где перенаправление работает, команда обычно "понимает", что если передается имя файла, то данные нужно брать из него.
Команда grep
ищет первый аргумент в наборе данных второго. Если находит, возвращает строку.
Программа wc
подсчитывает количество строк, слов и символов в файле. С помощью sort
происходит сортировка строк.
Когда требуется выполнить заранее подготовленный набор команд, его записывают в файл и делают этот файл исполняемым.
С другой стороны, команды вроде ls корректно выполняют перенаправление вывода в файл.