Чтение онлайн

на главную - закладки

Жанры

UNIX — универсальная среда программирования
Шрифт:

4
Но интерпретатор ее находит

$

Конечно, ваша переменная

PATH
должна быть правильно определена в файле
.profile
, чтобы вам не приходилось переопределять ее при каждом входе в систему.

Существуют и другие простые команды, которые вы можете адаптировать к среде по своему вкусу и создавать таким же способом. Нам показалось удобным иметь следующие команды:

• 

cs
для посылки подходящей последовательности специфических символов с целью очистки экрана вашего терминала (24 символа
перевода строки — практически универсальное решение);

• 

what
для запуска
who
и
ps -а
, чтобы сообщить, кто работает в системе и что он делает;

• 

where
для вывода идентифицированного названия используемой системы UNIX. Это удобно, если вы постоянно работаете с несколькими версиями. (Установка
PS1
служит для подобной цели.)

Упражнение 3.9

Просмотрите каталоги

/bin
и
/usr/bin
, чтобы выяснить, как много команд являются в действительности командными файлами. Можно ли это сделать с помощью одной команды? Подсказка: посмотрите
file(1)
. Насколько точно предположение, основанное на длине файла?

3.4 Аргументы и параметры команд

Хотя команда

nu
, как она задумывалась, удовлетворяет своему назначению, многие программы на языке
shell
могут обрабатывать аргументы, так что при их запуске можно задавать имена файлов и флаги.

Допустим, вы хотите создать программу с именем

cx
для установки права доступа к файлу на выполнение, так что

$ cx nu

есть сокращенная запись для

$ chmod +x nu

Вы уже знаете почти все, чтобы это сделать. Вам нужен файл

cx
, содержимое которого суть

chmod +x filename

Единственное, что требуется выяснить — как сообщить команде

cx
имя файла, так как при каждом запуске
cx
оно будет иным.

Если интерпретатор выполняет командный файл, то каждое вхождение

$1
заменяется первым аргументом, каждое вхождение
$2
 — вторым и т.д. до
$9
. Поэтому если файл
cx
содержит строку

chmod +x $1

то при выполнении команды

$ cx nu

порожденный интерпретатор заменит "

$1
" на первый аргумент "
nu
". Рассмотрим всю последовательность операций:

$ echo 'chmod +x $1' >cx
Вначале создадим cx

$ sh cx сх
Сделать сам файл cx выполняемым

$ echo echo Hi, there! >hello
Приготовим тест

$ hello
Попробуем

hello: cannot execute

$ cx hello
Сделаем файл выполняемым

$ hello
Попробуем снова

Hi, there!
Работает

$ mv cx /usr/you/bin
Установим
команду cx

$ rm hello
Уберем ненужное

$

Заметьте, что мы задали

$ sh cx сх

в точности так, как сделал бы автоматически интерпретатор, если бы

cx
была выполняемой и можно было бы задать

$ cx сх

А как быть, если нужно работать с несколькими аргументами, например, заставить программу

cx
воздействовать сразу на несколько файлов? Прямолинейное решение состоит в том, чтобы включить девять аргументов в командный файл:

chmod +x $1 $2 $3 $4 $5 $6 $7 $8 $9

(Это годится только для девяти аргументов, так как конструкция

$10
распознается как "первый аргумент, за которым следует 0"!) Если пользователь такого командного файла задаст меньше девяти аргументов, то недостающие окажутся пустыми строками. Это приведет к тому, что только настоящие аргументы будут переданы
chmod
порожденным интерпретатором. Такое решение, конечно, приемлемо, но не вполне корректно и не подходит для случая с числом аргументов более девяти.

С учетом упомянутой выше трудности интерпретатор предоставляет сокращенную запись

$*
, означающую "все аргументы". В этом случае правильно определить
cx
:

chmod +x $*

что является эффективным при любом числе аргументов.

Используя

$*
в своем репертуаре, вы можете создать некоторые полезные командные файлы, такие, как
lc
или
m
:

$ cd /usr/you/bin

$ cat lc

#lc: подсчет числа строк в файлах

wc -l $*

$ cat m

#m: точный способ послать почту

mail $*

$

Обе команды можно осмысленно использовать и без аргументов. Если нет аргументов,

$*
будет пустым, и
wc
и
mail
вообще не получат никаких аргументов. С аргументами или без них команда вызывается правильно:

$ lc /usr/you/bin/*

 1 /usr/you/bin/cx

 2 /usr/you/bin/lc

 2 /usr/you/bin/m

 1 /usr/you/bin/nu

 2 /usr/you/bin/what

 1 /usr/you/bin/where

 9 total

$ ls /usr/you/bin | lc

 6

$

Эти и другие команды, описываемые в настоящей главе, являются командами пользователя, т.е. вы создаете их для себя и помещаете в свой каталог

/bin
, поэтому вряд ли они должны стать общедоступными. В гл. 5 мы исследуем вопрос создания общедоступных программ на языке
shell
.

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9