Читаем Linux и UNIX: программирование в shell. Руководство разработчика. полностью

critical processing..6..you cannot interrupt me

Non‑critical processing..1..interrupt me now if you want

Non‑critical processing..2..interrupt me now if you want

Received interrupt on count 2

Now exiting…

Благодаря применению команды trap можно обрести большую степень контроля над "поведением" сценария при получении сигнала. Перехват и последующая обработка сигналов обеспечивают устойчивую работу сценариев.

<p><strong>26.4. Команда eval</strong></p>

Команда eval служит для оценки командной строки с целью завершения каких‑либо подстановок интерпретатора shell с последующим их вызовом. Команда eval используется для расширения значений переменных (если в результате одного прохода расширения не происходит, выполняется второй проход). Переменные, для оценки которых требуется два прохода, иногда называют сложными переменными. Хотя, по моему мнению, переменные не могут быть сложными.

Команда eval также может применяться для отображения значений простых переменных; эти переменные не должны быть сложными.

$ NAME=Honeysuckle

$ eval echo $NAME

Honeysuckle

$ echo $NAME

Honeysuckle

Наилучшим методом для понимания работы команды eval является изучение оценки командной строки, выполняемой этой командой.

<p><emphasis><strong>26.4.1. Выполнение команд, находящихся в строке</strong></emphasis></p>

Вначале создадим небольшой файл, testf, содержащий некоторый текст. Затем переменной myfile будет присвоена команда cat testf с последующим отображением значения переменной. Благодаря этому можно проверить возможность отображения на экране содержимого файла testf.

$ pg testf

May Day, May Day Going Down

Присвоим переменной myfile строку "cat testf:

$ MYFILE="cat testf"

Если требуется вывести содержимое файла testf на экран, нужно выполнить команду cat testf.

$ echo $MYFILE

cat testf

Теперь применим команду eval для оценки значения переменной; при этом следует помнить, что eval выполняет два прохода при оценке переменной myfile.

$ eval $MYFILE

May Day, May Day Going Down

В результате этого успешно оценивается значение переменной и применяется команда cat к файлу testf. При первом проходе отображается фактическая строка "cat testf", при втором проходе выполняется содержимое строки, в данном случае cat testf.

Рассмотрим другой пример. Переменной cat_passwd будет присвоена строка "cat /etc/passwd | more". Команда eval выполняет оценку содержимого данной строки.

$ CAT_PASSWD=`cat /etc/passwd | more`

$ echo $CAT_PASSWD

cat /etc/passwd|more

$ eval

$CAT_PASSWD

root:HccPbzT5tbOOg:0:0:root:/root:/bin/sh

bin:*:l:l:bin:/bin:

daemon:*:2:2:daemon:/sbin:

adm:*:3:4:ada:/var/adm:

Команда eval также хорошо подходит для отображения значения последнего параметра, передаваемого сценарию. Значение последнего параметра уже отображалось, но в этом случае оно будет отображено снова.

$ pg evalit

#!/bin/sh

# сценарий evalit

echo " Total number of arguments passed is $#"

echo " The process ID is $$"

echo "' Last argument is "$(eval echo \$$)

При выполнении этого сценария получим следующий результат (ID процесса может отличаться от случая к случаю):

$ evalit alpha bravo charlie

Total number of arguments passed is 3

The process ID is 780

Last argument is Charlie

В этом сценарии команда eval сначала оценивает значение переменной $$ в сравнении с ID процесса, а при выполнении второго прохода производится оценка последнего параметра, передаваемого переменной.

<p><emphasis><strong>26.4.2. Присвоение значения имени переменной</strong></emphasis></p>

Можно также поставить в соответствие полю данных имя переменной. Рассмотрим, что это означает на практике. Предположим, что в нашем распоряжении имеется следующий файл:

$ pg data

PC 486 MONITOR svga NETWORK yes

Нам необходимо, чтобы первому столбцу текста соответствовали имена переменных, а второму столбцу текста — значения соответствующих переменных. При этом должно отображаться следующее:

echo $PC

466

Как же можно достичь желаемого результата? Ниже приведен соответствующий сценарий, использующий команду eval.

$ pg eval_it

#!/bin/sh

#сценарий eval_it

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

Похожие книги

112 страниц про Париж. Опыт создания путеводителя (в помощь самостоятельным туристам)
112 страниц про Париж. Опыт создания путеводителя (в помощь самостоятельным туристам)

  По Парижу приятно гулять, бесцельно бродить, кружить по узким улочкам, отдыхать в маленьких кафе и в парках у фонтанов. Здесь есть все для любителей архитектуры, ценителей живописи, театралов, меломанов, гурманов, поклонников всевозможных развлечений. Париж притягивает, удивляет, очаровывает, постепенно приоткрывая тайны любознательному гостю, который теряется от сложности выбора: что же увидеть прямо сейчас, а что отложить на потом. Мои 112 страниц про Париж, надеюсь, помогут сделать этот выбор. Предложенные 7 прогулок по городу включают в себя не только известные всему миру достопримечательности, но и множество других, которые часто остаются за пределами стандартных туристических маршрутов.  

Елена Р Стамбулян , Елена Р. Стамбулян

Руководства / Путеводители / Словари и Энциклопедии
40+. Уход за телом
40+. Уход за телом

Женщина после 40 лет – настоящая богиня, умудренная опытом и оттого еще более прекрасная. Но чтобы надолго сохранить красоту и молодость, нужно постоянно собой заниматься: ухаживать за своим телом, руками и ногами, выполнять физические упражнения и соблюдать диету. Благодаря этой книге вы научитесь самостоятельно готовить омолаживающие, питательные, увлажняющие кремы и маски, а также скрабы и пилинги из натуральных продуктов; выполнять легкие и эффективные упражнения для стройной фигуры и профилактики варикозного расширения вен, делать массаж рук и ног, навсегда избавитесь от целлюлита и сможете легко ориентироваться в выборе омолаживающих процедур в СПА-салонах и хирургических операций в клиниках красоты. Правила здорового питания, популярные диеты и рецепты полезных блюд – в этой книге есть все, что поможет 40-летним женщинам всегда быть в форме.

Анастасия Витальевна Колпакова

Здоровье / Руководства / Здоровье и красота / Дом и досуг / Словари и Энциклопедии