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

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

$ diff file1  fiel2  &gtdiffout

diff: fiel2:  No  such  file  or  directory

$

І справді бажано, щоб повідомлення про помилки оброблялися саме так, адже навряд чи можна назвати вдалим спосіб, при якому повідомлення зникали б у файлі diffout, залишаючи користувача в повної впевненості, що команда відпрацювала правильно

При запуску будь-якої програми за замовчуванням породжуються три файли, пронумеровані невеликими цілими числами, які називаються дескрипторами файлу (Повернемося до них у главі 7) Стандартний введення, 0, і стандартний висновок, 1, з якими ми вже добре знайомі, часто перенаправляються в файли і канали Останній файл з номером 2 – це стандартний висновок помилок, Який зазвичай потрапляє на термінал

Іноді програми виробляють висновок у файл стандартного виводу помилок, навіть якщо працюють правильно Так поступає програма time, яка виконує команду і записує час виконання в стан дротяні висновок помилок:

$ time  wc ch31

931     4288     22691 ch31

&gtwcout

$ time  wc ch31  &gtwcout  2&gttimeout

$ cat  timeout

real

10

user

04

sys

03

$

Конструкція 2>імя5файла(Прогалини між 2 і знаком> неприпустимі) спрямовує стандартний висновок помилок у файл вона синтаксично тяжеловесна, але функцію свою виконує (Програма time в нашому короткому тесті виводить не надто точний час але якщо проводити серію тривалих тестів, то отримані цифри будуть корисними і досить достовірними, так що може виникнути бажання зберегти їх для подальшого аналізу див табл 81)

Також існує можливість обєднання двох вихідних потоків:

$ time  wc ch31  &gtwcout  2&gt&amp1

$ cat  wcout

931     4288     22691 ch31

real

10

user

04

sys

03

$

Запис 2> & 1 говорить оболонці, що слід помістити висновок стандартних помилок в той же потік, що і стандартний висновок Це не якесь додаткове мнемонічне значення амперсанда, а просто йди ома, яку треба запамятати Можна використовувати і 1> & 2 – для того, щоб додати стандартний висновок до стандартного висновку помилок:

echo .. 1&gt&amp2

виводить дані на стандартний висновок помилок У командних файлах таким способом запобігається зникнення повідомлень в каналах або файлах

У оболонці є механізм, що дозволяє помістити стандартний ввід команди разом з командою, а не в окремому файлі, так що командний файл може бути абсолютно незалежним Напишемо ще раз програму довідкової служби 411:

$ cat  411

grep  &quot$*&quot  &lt&ltEnd dial–a–joke    212–976–3838 dial–a–prayer    212–246–4200 dial  santa    212–976–3636

dow  jones  report   212–976–4141

End

$

На жаргоні оболонки така конструкція називається вбудованим до5 документом (here document) це означає, що вхідні дані знаходяться там же, де і сама команда, а не в якомусь окремому файлі Символ << позначає цю конструкцію; слово, наступне за ним (у даному прикладі - End), служить для того, щоб обмежити введення, який розуміється як все, що передує такому слову, що знаходиться в окремому рядку. Оболонка замінює символи $, `...` і \ у вхідних

даних вбудованого документа, якщо тільки якась частина слова не укладена в лапки або не використовувати зворотна коса риска в цьому випадку весь документ сприймається буквально

Наприкінці глави ми повернемося до вбудованим документам і наведемо набагато більш цікаві приклади їх використання

У табл 32 приведений список різних позначень для перенаправлення вводу-виводу, зрозумілих оболонці

Вправа 314Порівняйте програму 411, що містить вбудований документ, з її початковою версією Яку з них легше підтримувати Яку краще використовувати для створення загальної служби ~

Таблиця 32 Перенаправлення ввода5вивода в оболонці

Позначення

Дія

&gtfile

&gt&gtfile

&ltfile p1|p2

^

n&gtfile n&gt&gtfile  n&gt&ampm

n&lt&ampm

&lt&lts

&lt&lt\s

&lt&lt’s

направляє стандартний висновок в file додає стандартний висновок в file отримує стандартний ввід з file

зєднує стандартний висновок програми p1 з введеннямp2

застарілий синонім для |

прямий висновок з файлового дескриптора n в file

додає висновок з файлового дескриптора n в file

обєднує висновок з файлового дескриптора n  з файловим дескриптором m

обєднує введення з файлового дескриптора n  з файловим дескриптором m

вбудований документ: отримує стандартний ввід до тих пір, поки на початку рядка не стрінеться s обробляються символи $, `..` і \

вбудований документ без підстановок вбудований документ без підстановок

Джерело: Керниган Б, Пайк Р, 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>

*

*