Створення нових команд

Настав час звернутися до теми, заявленої в розділі 1, і поговорити про те, як зі старих команд створювати нові

Якщо якусь послідовність команд доводиться виконувати досить часто, то було б зручно перетворити її на «нову» команду, що має власне імя, так щоб її можна було використовувати надалі як звичайну команду Щоб бути конкретними, припустимо, що вам часто доводиться підраховувати кількість користувачів за допомогою конвеєра

$ who  | wc  -l

Така можливість описувалася у розділі 1, тепер же хотілося б створити нову програму nu, яка б це робила

Перший крок полягає в створенні звичайного файлу, що містить

«Who | wc-l» Можна зробити це в улюбленому редакторі або ж проявити творчий підхід:

$  echo  who  |  wc  -l  &gtnu

(Якби лапок не було, то що було б записано в nu)

Як уже згадувалося в розділі 1, оболонка – це програма, подібна редактору або командам who і wc вона називається sh А раз це програма, можна запустити її і перенаправити її ввід Отже, запустимо оболонку, задавши для неї введення з файлу nu, а не з терміналу:

$ who

you           tty2        Sep  28  07:51 rhh           tty4        Sep  28  10:02 moh           tty5        Sep  28  09:38 ava           tty6        Sep  28  10:17

$ cat  nu

who  | wc  –l

$ sh  &ltnu

4

$

Висновок виглядає так само, як якби команда who | wc-l була введена з терміналу

Знову-таки, як і багато інших програм, оболонка забирає вхідні дані з файлу, якщо він зазначений як аргумент так що можна було написати

$ sh  nu

і результат не змінився б Але вводити кожного разу «sh» незручно, до того ж виникає відміну програм, написаних (наприклад) на Сі, від програм, створених за рахунок зєднання інших програм з оболоч кой1 Тому якщо файл є виконуваним і містить текст, то оболонка вважає, що це файл з командами оболонки Такий файл називається командним файлом оболонки Отже, все, що потрібно – це зробити nu виконуваної один-єдиний раз:

$ chmod  +x nu

і тоді згодом її можна буде викликати наступним чином:

$ nu

З цього моменту користувачі nu вже не зможуть здогадатися (просто запустивши програму), що вона реалізована таким простим способом

Як же оболонка насправді запускає nu Створюється новий процес оболонки, точно так само, як якби було введено

$ sh  nu

Ця дочірня оболонка називається подоболочкі і являє собою процес оболонки, запущений поточної оболонкою Стандартний введення sh nu надходить з терміналу, тому sh nu – це не те ж саме, що sh

У своєму теперішньому стані команда nu працює, тільки якщо вона знаходиться в поточному каталозі (якщо, звичайно, поточний каталог присутній у змінній PATH, що і передбачатиметься починаючи з цього моменту) Щоб мати можливість використовувати nu завжди, незалежно від того, в якому каталозі користувач працює, перемістіть її в особистий каталог / bin і додайте / usr / you / bin в шлях пошуку:

$ pwd

/usr/you

$ mkdir bin Створити bin, Якщо він не існував раніше

$ echo $ PATH Перевірити PATH, Щоб знати напевно

:/usr/you/bin:/bin:/usr/bin             Повинно бути щось схоже

$ mv nu bin Встановити nu

$ ls nu

nu not  found                        Її дійсно немає в поточному каталозі

1 Однак таке розмежування існує в більшості інших операційних систем

$ nu

$

Природно, змінна PATH повинна бути правильно задана у файлі

. Profile, тоді не треба буде повторювати установки при кожному вході в систему

Є й інші прості команди, які можна створити таким же способом, щоб налаштувати оточення за своїм смаком

Ось ті з них, які можуть стати в нагоді:

•&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp cs виводить власну послідовність загадкових символів для очищення екрана терміналу (Найчастіше реалізується за допомогою виводу 24 символів нового рядка)

•&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp what запускає who і ps-a, виводячи повідомлення про тих, хто знаходиться в системі, і про те, чим вони займаються

•&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp where друкує ідентифікаційне імя системи UNIX це зручно, якщо регулярно використовується кілька систем (Установка PS1 призводить до такого ж результату)

Вправа 39Перегляньте / bin та / usr / bin, щоб дізнатися, скільки команд є в даний час командними файлами Чи можна зробити це за допомогою однієї команди Підказка: file (1) Наскільки вірні здогадки, засновані на оцінці довжини файлу ~

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

*

*