Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






Припустимо вам треба отримати список файлів, імена яких закінчуються на.png[15] в каталозі images. Цей список дуже довгий, тому у вас може виникнути бажання зберегти його в файл для того, щоб переглянути його пізніше. Ви можете запровадити таку команду:

$ ls images/*.png 1> file_list

Це означає, що стандартний вихід цієї команди (1) перенаправляється (>) у файл з ім'ям file_list. Оператор > - це оператор перенаправлення виведення. Якщо файл для перенаправлення не існує, він буде створений, але якщо він існує, його попередній вміст буде перезаписаний. Проте дескриптором за умовчанням, який перенаправляється цим оператором, є стандартний вихід, а тому немає необхідності явно вказувати його у командному рядку. Отже, ви можете записати команду більш спрощено:

$ ls images/*.png > file_list

і результат при цьому буде таким самим. Потім ви можете переглянути файл за допомогою програми перегляду текстових файлів, наприклад, less.

Тепер уявіть, що потрібно дізнатися, скільки існує цих файлів. Замість того, щоб рахувати їх вручну, ви можете скористатися утилітою під назвою wc (Word Count - підрахунок слів) з опцією -l, яка виводить на стандартний вихід кількість рядків у файлі. Ось один з варіантів рішення:

$ wc -l 0< file_list

який видасть вам бажаний результат. Оператор - 0,

$ wc -l < file_list

Тепер уявіть, що вам потрібно видалити всі “розширення” файлів і помістити результат в інший файл. Однією з утиліт для виконання цього є sed (Stream EDitor - потоковий редактор). Ви просто перенаправляєте стандартний вхід sed у файл file_list, а його вихідні дані перенаправляєте в результуючий файл, тобто the_list:

$ sed -e 's/\.png$//g' < file_list > the_list

і ваш список створено, готовий для перегляду в зручній для вас час будь-якою з програм перегляду.

Також корисним може виявитися перенаправляти стандартний потік помилок. Наприклад, вам потрібно дізнатися, до яких каталогів з /shared у вас немає доступу: одним із рішень буде рекурсивне отримання списку файлів в цьому каталозі і перенаправлення помилок у файл, не показуючи при цьому стандартного виводу:

$ ls -R /shared > /dev/null 2> errors

це означає, що стандартний вихід буде переспрямований (>) у файл /dev/null, в якому видаляється усе, що ви в нього записуєте (тобто стандартний вихід не відображається), а стандартний потік помилок (2) перенаправляється (>) у файл errors.

4.3. Канали

Канали (pipes) - це в пеіному розумінні комбінування перенаправлень входу і виходу. Принцип дії схожий на фізичний канал, звідси і така назва: один процес відправляє дані в один кінець каналу, а інший процес зчитує дані на іншому кінці. Оператор каналу - |. Давайте повернемося назад до прикладу зі списком файлів. Припустимо, вам потрібно відразу дізнатися, скільки там відповідних файлів, але без збереження списку у тимчасовому файлі. Тоді вам треба скористатися наступної командою:

$ ls images/*.png | wc -l

яка означає, що стандартний вихід команди ls (тобто список файлів) перенаправляється на стандартний вхід команди wc. При цьому ви отримаєте бажаний результат.

Також ви можете відразу скласти список файлів “без розширень”, скориставшись наступної командою:

$ ls images/*.png | sed -e 's/\.png$//g' > the_list

або ж, якщо ви хочете побачити список відразу, не зберігаючи його у файл:

$ ls images/*.png | sed -e 's/\.png$//g' | less

Дія каналів і перенаправлень не обмежується лише текстом, який може читати людина. Наприклад, наступна команда, виконана в Термінал'і:

$ xwd -root | convert - ~/my_desktop.png

відправить знімок вашого робочого столу в файл my_desktop.png[16] у вашому особистому каталозі.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.