файл /etc/config/sysinit, который запускается при загрузке компьютера с операционной системой QNX Neutrino (см. раздел 8);
файл /usr/bin/ph, который запускает графическую оболочку Photon (см. раздел 5).
разделе 4;
описании утилиты ksh в справочнике по утилитам.
Файл построения образа операционной системы включает в себя раздел файла сценария, который помечен атрибутом +script. Утилита mkifs выполняет разбор этого сценария, однако его исполнение осуществляет модуль procnto на этапе загрузки операционной системы. Модуль procnto обеспечивает очень простую среду исполнения сценариев, которая позволяет выполнять последовательности команд и обладает примитивными возможностями синхронизации.
Командный интерпретатор esh обеспечивает среду исполнения простых сценариев во встроенных системах, где полный функциональный набор интерпретатора ksh является излишним. Встроенный командный интерпретатор esh поддерживает исполнение утилит, простое перенаправление, удлинение файловых имен, псевдонимы и действия над окружением.
Расширенный командный интерпретатор fesh, как и esh, предоставляет ограниченную среду исполнения сценариев, однако поддерживает дополнительные встроенные команды для часто используемых утилит, что позволяет сэкономить ресурсы, не включая эти утилиты во встраиваемую систему. Командный интерпретатор fesh включает в себя встроенные аналоги команд cp, df, ls, mkdir, rm и rmdir, однако в большинстве случаев эти аналоги обеспечивают только базовые функции соответствующих утилит и не являются полными.
python представляет собой мощный объектно-ориентированный язык, который может быть использован для обработки файлов, манипуляций со строками, синтаксического разбора HTML и многого другого.
Утилита sed представляет собой потоковый редактор, что делает его полезным для многократного изменения файла или множества файлов. Программа sed часто используется для редактирования сценариев или в качестве утилиты в других сценариях.
Утилита gawk (GNU awk) представляет собой язык программирования, который предназначен для сравнения с шаблонами и работы с содержимым файлов. Эту утилиту также можно использовать для работы со сценариями и вызывать из самих сценариев.
Проект «Bazaar» на интернет-сайте сообщества Foundry27 (http://community.qnx.com) содержит утилиту perl, которая, как и gawk, полезна для работы с файлами и шаблонами. Имя perl расшифровывается как Practical Extraction and Report Language — практичный язык извлечения данных и генерации отчетов.
описания утилит sed и gawk в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01;
Robbins, Arnold, and Dale Dougherty. 1997. sed & awk, 2nd Edition. Sebastopol, CA: O'Reilly & Associates. ISBN 1-56592-225-5;
Schwartz, Randal L., and Tom Phoenix. 2001. Learning Perl. Sebastopol, CA: O'Reilly & Associates. ISBN 0-59600-132-0.
запустить другой командный интерпретатор, указав имя сценария в качестве аргумента:
sh myscript
загрузить сценарий в текущий командный интерпретатор с помощью команды "точка":
. myscript
сделать сценарий исполняемым с помощью утилиты chmod, а затем вызвать его следующим образом:
chmod 744 myscript
./myscript
#! interpreter [arg]
#! /bin/sh
Путь к данному интерпретатору;
Опциональные аргументы, заданные в первой строке сценария;
Путь к сценарию;
Аргументы этого сценария, заданные в качестве командно-строковых параметров.
./my_script my_arg1 my_arg2 ...
interpreter
[arg] ./my_script my_arg1 my_arg2 ...
• Интерпретатор не может быть иным, нежели заданный #!.
• Ядро игнорирует атрибуты setuid и getuid у сценария; дочерний процесс будет иметь такие же идентификаторы пользователя и группы, что и родительский процесс. (Для получения дополнительной информации см. раздел “Setuid и setgid” в разделе “Работа с файлами”.)
Некоторые интерпретаторы корректируют список получаемых аргументов:
• ksh удаляет себя из списка аргументов;
• gawk заменяет свое путевое имя просто на имя “gawk“;
• perl удаляет из аргументов себя и имя сценария, и добавляет имя сценария в переменную $0.
#! /bin/sh
echo $0
for arg in "$@" ; do
echo $arg
done
./ksh_script
one
two
three
#!/usr/bin/gawk -f
BEGIN {
for (i = 0; i < ARGC; i++)
print ARGV[i]
}
gawk
one
two
three
#! /usr/bin/perl
for ($i = 0; $i <= $#ARGV; $i++) {
print "$ARGV[$i]\n";
}
Если этот сценарий запустить командой «./perl_script one two
three» то загрузчик вызовет его как «/usr/bin/perl
./perl_script one two three», а затем perl удаляет себя и
имя сценария из списка аргументов. Вывод будет иметь
следующий вид:
one
two
three
#!/bin/sh
#
# tfind:
# сценарий, который ищет строки в различных файлах и выводит
# эти строки с помощью утилиты less
case $# in
1)
find . -name '*.[ch]' | xargs grep $1 | less
exit 0 # успешное завершение
esac
echo " Введите команду tfind строка_для_поиска, "
echo " где строка_для_поиска — искомая строка "
echo " "
echo " Например, команда tfind console state просматривает все файлы"
echo " в текущем каталоге и его подкаталогах и отображает все "
echo " экземпляры фразы console state. "
exit 1 # неудачное завершение
case $# in
1)
...
esac
find . -name '*.[ch]' | xargs grep $1 | less
find . -name '*.[ch]';
xargs grep $1;
less.
grep представляет собой утилиту для поиска в содержимом файлов. Она выполняет поиск первого аргумента в файлах, которые указаны в ее командной строке. $1 — еще одна специальная переменная командного интерпретатора, которая содержит первый аргумент, переданный сценарию (т. е. искомую строку);
xargs представляет собой утилиту, которая преобразует свои входные данные в командно-строковые параметры другой переданной ей команды. В этом примере утилита xargs принимает список файлов от утилиты find и превращает его в командно-строковые аргументы команды grep. Здесь утилита xargs используется в первую очередь для эффективности. Аналогичные действия можно было бы выполнить при помощи только утилиты find:
find . -name
'*.[ch]' -exec grep $i {} | less
find . -name
'*.[ch]' | xargs grep $1 | less
exit 0 # успешное завершение
echo " Введите команду tfind строка_для_поиска, "
echo " где строка_для_поиска — искомая строка "
echo " "
echo " Например, команда tfind console state просматривает все файлы"
echo " в текущем каталоге и его подкаталогах и отображает все "
echo " экземпляры фразы console state. "
exit 1 # неудачное завершение
интерпретируются, а не компилируются;
выполняют большую часть своей работы, запуская другие программы.
Чтобы запускать сценарий так же, как утилиту, необходимо сделать его исполняемым с помощью команды chmod. Например, чтобы любой пользователь мог запускать сценарий, следует выполнить команду:
chmod a+x имя_сценария
ksh имя_сценария
. имя_сценария
Как и в случае с любым исполняемым файлом, если сценарий находится в каталоге, который не указан в переменной окружения PATH, то для его запуска необходимо указать путь к сценарию:
˜/bin/my_script
Запущенный сценарий наследует окружение от родительского процесса. Если сценарий исполняет команду, которая может отсутствовать в переменной окружения PATH, необходимо указать путь к этой команде или добавить этот путь в переменную PATH сценария.
Если сценарий запущен не командой "точка", он не может изменять окружение и текущий каталог своего родительского командного интерпретатора.
Сценарий не сработает при наличии в нем символов конца строки, которые используются в операционной системе DOS. При редактировании сценария для QNX Neutrino в операционной системе Windows следует преобразовать файл сценария в формат, который используется файловой системой QNX 4, с помощью утилиты textto с параметром -l.