Виведення програми як аргументи UNIX

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

$ echo At  the  tone  the  time  will  be  `date`

At the  tone  the  time  will  be Thu  Sep 29 00:02:15  EDT  1983

$

Невелика зміна, покликане показати, що зворотні лапки

`..` Інтерпретуються оболонкою всередині подвійних лапок …”:

$ echo &quotAt  the  tone

&gt the  time  will be `date`&quot

At the  tone

the  time  will  be Thu Sep 29 00:03:07  EDT  1983

$

Наведемо інший приклад Припустимо, потрібно відправити пошту цілому списку користувачів, реєстраційні імена яких нахо дятся у файлі mailinglist Можна, звичайно, вирішити завдання, перетворивши mailinglist у відповідну команду mail і предявивши її оболонці (не дуже гарний спосіб), але набагато простіше сказати:

$ mail  `cat mailinglist` &ltletter

Виконується cat, створюючи список імен користувачів, які й стають аргументами mail (Інтерпретуючи висновок, укладений в зворотні лапки, як аргументи, оболонка сприймає роздільники рядків як роздільники слів, а не як символи завершення командного рядка ця тема буде докладно обговорюватися в розділі 5) Зворотні лапки досить прості і зручні у використанні, так що команда mail не потребує в спеціальному параметрі для списку розсилки

Дещо інший підхід полягає в перетворенні файлу ma-ilinglist з власне списку імен в програму, яка виводить список імен

$ cat mailinglist Нова версія

echo don whr  ejs mb

$ cx  mailinglist

$ mailinglist

don whr ejs mb

$

Тепер розсилка листів користувачам за списком виглядає наступним чином:

$ mail  `mailinglist`  &ltletter

Якщо додати ще одну команду, зявиться можливість змінювати список користувачів в інтерактивному режимі Така програма називається pick:

$ pick аргументи ..

Аргументи предявляються один за іншим, і після кожного програма чекає відповіді Висновком pick є ті аргументи, у відповідь на які надійшло y (yes) будь-який інший відповідь означає, що аргумент буде відкинутий Наприклад,

$ pr  `pick *c` | lpr

виводить одне за одним всі імена файлів, що закінчуються на c ті з них, які будуть обрані (відповідь «y»), друкуються програмами pr і lpr (Команда pick не входить в сьому версію, але вона настільки проста і зручна, що її версії були включені в приклади глав 5 і 6)

Припустимо, що мова йде про другий версії mailinglist Тоді посилка листів адресатам don і mb виглядає так:

$ mail  `pick \`mailinglist\“  &ltletter

don y whr ejs mb  y

$

Зверніть увагу на те, що в записі присутні вкладені зворотні лапки наявність зворотного косою риси запобігає інтерпретацію внутрішніх `..` при розборі зовнішніх

Вправа 310 Що відбудеться, якщо в

$ echo `echo  \`date\“

прибрати всі символи зворотної косою риси ~

Вправа 311 Введіть

$ `date`

і поясніть результат ~

Вправа 312

$ grep-l шаблон імена5файлов

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

$ команда `grep-l шаблон імена5файлов`

~

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

*

*