Kniga-Online.club
» » » » UNIX — универсальная среда программирования - Керниган Брайан Уилсон

UNIX — универсальная среда программирования - Керниган Брайан Уилсон

Читать бесплатно UNIX — универсальная среда программирования - Керниган Брайан Уилсон. Жанр: Интернет год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

$ cd /usr/you/bin

$ for i in `pick *`

> do

>  echo ============== Это файл $i ==============

>  cat $i

> done | mail где-то!боб

$

Однако посмотрим на это с точки зрения адресата "где-то!боб": он должен получить почту, в которой все файлы четко разделены, но ему придется воспользоваться редактором для разбивки сообщений на отдельные файлы. Для того чтобы адресату ничего не надо было делать, почтовое сообщение, построенное подходящим образом, должно автоматически распаковать себя, а значит, оно должно быть командным файлом, содержащим и сами файлы, и операции по их распаковке. Вторая идея заключается в том, что конструкция языка shell "документ здесь" является удобным способом задания информации для команды при ее запуске. Тогда остальная часть задачи сводится к тому, чтобы правильно расставить кавычки. Ниже приведена работающая программа bundle, которая группирует файлы в выходной поток самодокументированного командного файла:

$ cat bundle

# bundle: группирует файлы в распределенный пакет

echo '# Для разбиения на файлы вызовите sh с этим файлом'

for i

do

 echo "echo $i 1>&2"

 echo "cat >$i <<'End of $i'"

 cat $i

 echo "End of $i"

done

$

Поскольку мы взяли в кавычки "End of $i", любые метасимволы из файлов будут игнорироваться.

Естественно, что вам следует выполнить пробный запуск программы, чтобы не нанести ущерб адресату "где-то!боб":

$ bundle cx lc >junk                Пробный запуск bundle

$ cat junk

# Для разбиения на файлы вызовите sh с этим файлом

echo cx 1>&2

cat >cx <<'End of cx'

chmod +x сх

End of cx

echo lc 1>&2

cat >lc <<'End of lc'

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

wc -l $*

End of lc

$ mkdir test

$ sh ../junk                        Попробуем

cx

lc

$ ls

cx

lc

$ cat cx

chmod +x $*

$ cat lc

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

wc -l $* Похоже верно

$ cd ..

$ rm junk test/*; rmdir test        Удалим ненужное

$ pwd

/usr/you/bin

$ bundle `pick *` | mail где-то!боб Посылка файлов

$

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

End of имя_файла

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

Программа bundle является хорошим примером приспособляемости программного мира UNIX: в ней используются циклы языка shell, переключение ввода-вывода, конструкция "документ здесь" и командные файлы. Она непосредственно обращается к команде mail, и, что особенно интересно, порождает программу. Это одна из самых "красивых" среди известных вам shell-программ: файл в несколько строк предлагает простое и элегантное решение.

Упражнение 3.17

Как бы вы использовали bundle для посылки всех файлов с учетом вложенных каталогов? Подсказка: командные файлы могут быть рекурсивными.

Упражнение 3.18

Модифицируйте программу bundle так, чтобы к каждому файлу она добавляла информацию, выведенную командой ls -l, в частности права доступа и время его последнего изменения. Сравните возможности bundle и архивной программы ar(1).

3.10 Для чего нужно программировать на языке shell!

Программа shell системы UNIX не относится к типичным интерпретаторам команд, хотя и дает возможность запускать команды обычным способом. Тем не менее это язык программирования, который позволяет достичь большего. Имеет смысл сделать ретроспективный обзор данной главы, поскольку здесь приведен довольно обширный материал, и, кроме того (что является главной причиной), мы обещали вам обсудить "средства общего пользования", а затем увлеклись примерами программирования на языке shell. Дело в том, что используя язык shell, вы все время пишите маленькие, практически однострочные программы, в частности конвейер — это программа, равноценная фразе "Чай готов". Однако вы выполняете свою работу так легко и естественно (если умеете), что даже не считаете ее программированием.

Интерпретатор дает вам такие средства, как циклы, переключение ввода-вывода с помощью < и >, порождение имен файлов с помощью *, причем применение этих средств единообразно во всех программах. Некоторые средства, например командные файлы и программные каналы, на самом деле обеспечиваются ядром, но язык shell предоставляет естественную запись для их создания. Они не только удобны, но и увеличивают мощность системы в целом.

Перейти на страницу:

Керниган Брайан Уилсон читать все книги автора по порядку

Керниган Брайан Уилсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


UNIX — универсальная среда программирования отзывы

Отзывы читателей о книге UNIX — универсальная среда программирования, автор: Керниган Брайан Уилсон. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*