Перенаправлення вводу-виводу UNIX

Більшість розглянутих команд здійснюють виведення на термінал деякі, наприклад редактор, забирають дані теж з терміналу Практично завжди в якості терміналу може виступати файл введення або виведення або обидва відразу Наприклад:

$ ls

виводить список файлів на термінал Якщо ж ввести

$ ls &gtfilelist

то той же самий список буде виведений не так на термінал, а в файл file-list Символ> означає «помістити вивід у вказаний файл замість терміналу» Якщо такий файл не існував, він буде створений, а якщо існував, то перезаписаний На термінал нічого не виводиться Інший приклад: можна обєднати декілька файлів в один, зібравши висновок команди cat в файл:

$ cat  f1  f2  f3  &gttemp

Символ >> позначає майже таку ж дію, як і>, з тією лише раз ницей, що він «дописує в кінець» Тобто команда

$ cat  f1  f2  f3  &gt&gttemp

копіює вміст f1, f2 і f3 в кінець файлу temp замість того, щоб перезаписувати наявне в ньому вміст Як і у випадку>, якщо файл temp що раніше не існував, він буде створений спочатку порожнім

Аналогічно символ < показує, що вхідні дані програма повинна брати не з терміналу, а з файлу, вказаного далі. Наприклад, можна підготувати лист у файлі let, а потім відправити його декільком адресатам

$ mail  mary joe  tom  bob &ltlet

У всіх вищенаведених прикладах прогалини з будь-якого боку від> або < не обов'язкові, ми ж дотримуємося традиційного форматування.

Перенаправлення виводу за допомогою> надає можливість комбінувати програми, дозволяючи отримувати результати, раніше недоступні Наприклад, можна надрукувати список користувачів в алфавітному порядку:

$ who  &gttemp

$ sort &lttemp

Так як who виводить по одному рядку для кожного зареєстрованого користувача, а wc-l вважає кількість рядків (скасовуючи підрахунок слів і символів), то можна порахувати кількість користувачів в системі:

$ who  &gttemp

$ wc -l &lttemp

Можна порахувати кількість файлів в поточному каталозі за допомогою

$ ls &gttemp

$ wc -l &lttemp

хоча в цьому випадку саме імя temp також включається в підрахунок Можна вивести файли в три колонки:

$ ls &gttemp

$ pr  -3  &lttemp

Нарешті, можна дізнатися, чи зареєстрований в системі конкретний користувач, скомбінувавши who і grep:

$ who  &gttemp

$ grep  mary &lttemp

У всіх цих прикладах важливо памятати, що інтерпретацію символів < і> здійснює оболонка (як і інтерпретацію символів типу * в шаблонах імен файлів), а не конкретні програми «Централізація» цієї можливості в оболонці означає, що перенаправлення введення і виведення може застосовуватися в будь-яких командах сама програма і не знає, що відбувається щось незвичайне

Через це виникло важливу угоду Команда

$ sort &lttemp

сортує вміст файлу temp, як і команда

$ sort temp

але існує відмінність Рядок стандартний ввід, Який оболонка перенаправила таким чином, щоб він надходив з файлу У другому ж прикладі з командою sort імя файлу temp передається команді як аргумент, sort читає файл і сортує його Команда sort може отримувати як аргументи декілька файлів, наприклад

$ sort temp1 temp2 temp3

а якщо імена файлів не задані, то вона сортує стандартний ввід Це важлива властивість здебільшого команд: якщо імена файлів не вказані, то обробляється стандартний ввід Це означає, що можна просто «перемовлятися» з програмами, щоб побачити, як вони працюють Наприклад:

$ sort ghi

abc def ctld abc def ghi

$

Використання цього принципу буде обговорюватися в наступному розділі

Вправа 15 Поясніть, чому

$ ls &gtlsout

включає lsout в список імен ~

Вправа 16 Поясніть висновок команди

$ wc temp &gttemp

Якщо в імені команди буде зроблена помилка, як в

$ woh  &gttemp

що станеться ~

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*