Page 28 - 4820
P. 28
певними файлами. Файл у системі UNIX розглядається як потік байт. Оскільки
пристрої в UNIX розглядаються як файли, а операції вводу і виводу – як читання і запис
у відповідні файли, це дозволяє легко переводити вхідний і вихідний потоки з файлів
на пристрої чи навпаки.
Стандартне введення за замовчуванням зчитується з клавіатури. Якщо як
параметр вказано ім’я файлу, то замість стандартного вводу відповідна утиліта буде
організовувати вхідний потік з указаного файлу (але так діють не всі команди!)
Вихідних потоків є два – стандартний потік виводу (за замовчуванням у сучасних
системах – на екран монітору), і потік повідомлень про помилки (за замовчуванням –
туди ж).
Оболонка дає змогу перенаправити потоки у заданий файл. Символ ‘<’
перенаправляє вхідний потік. Після цього символу очікується ім’я файлу або пристрою,
з якого буде братись вхідний потік.
Наприклад, команда cat без параметрів очікує ввід з клавіатури, і кожний рядок
передає на екран монітора. Команда cat my_file замість вводу з клавіатури виведе на
екран вміст файлу my_file, якщо такий існує, і повідомлення про помилку, якщо такого
не існує.
Команда cat < my_file на перший погляд буде робити те ж саме, але з точки зору
операційної системи і самої утиліти cat все буде відбуватись по-іншому. У
попередньому випадку командна оболонка запускала утиліту cat і передавала їй
параметр командного рядка my_file, а сама утиліта cat вже інтерпретувала цей параметр
як ім’я вхідного файлу. В останньому випадку командна оболонка запускала утиліту cat
без параметрів, але передавала їй вміст файлу my_file як вхідний потік.
Команда cat > my_file перенаправляє вихідний потік. Оскільки вхідний потік не
перенаправляється, ввід буде очікуватись з клавіатури. Тому ця команда створить файл
my_file, якщо він не існує, знищить вміст файлу my_file, якщо він існує, і буде
записувати в цей файл все, що буде введено з клавіатури, аж поки не поступить символ
кінця файлу EOF (Ctrl+D). Існує також можливість дописати інформацію в кінець
файлу, не знищуючи його вмісту. Така команда буде мати вигляд cat >> my_file
Команда
cat < my_file1 > my_file2
перенаправляє як вхідний, так і вихідний потік. Якщо файл my_file1 існує, то його
вміст буде записано в файл my_file2. Якщо не існує, то повідомлення про помилку буде
виведено на екран. Потік повідомлень про помилки в оболонці sh перенаправляється
окремо, він позначається 2>. Наприклад, команда
cat < my_file1 > my_file2 2> my_file3
у разі, якщо файл my_file1 існує, запише його вміст у файл my_file2, а якщо не існує, то
запише повідомлення про помилку в файл my_file3. Важливо наголосити, що оболонки
csh і tcsh не мають засобів безпосередньо перенаправляти потік повідомлень про
помилки. Тим не менше, засобами цих оболонок також можна організувати окреме
перенаправлення потоків завдяки хитрим прийомам програмування. Інформацію про це
можна знайти в літературі.
Дуже часто потік помилок намагаються взагалі “загасити”. Для того щоб
знищити якийсь потік, існує спеціальний пристрій /dev/null. Все, що в нього
направляється, зникає безслідно.
Перенаправлення вводу-виводу широко використовуються у двох випадках.
Перший – це запуск утиліт у фоновому режимі. Щоби їхня робота не заважала роботі
користувача з терміналом, слід так перенаправити потоки вводу-виводу, щоби вони
26