Книга: Искусство программирования на языке сценариев командной оболочки
Пример 31-2. Передача вывода от команды echo команде read, по конвейеру
Пример 31-2. Передача вывода от команды echo команде read, по конвейеру
#!/bin/bash
# badread.sh:
# Попытка использования 'echo' и 'read'
#+ для записи значений в переменные.
a=aaa
b=bbb
c=ccc
echo "один два три" | read a b c
# Попытка записать значения в переменные a, b и c.
echo
echo "a = $a" # a = aaa
echo "b = $b" # b = bbb
echo "c = $c" # c = ccc
# Присваивания не произошло.
# ------------------------------
# Альтернативный вариант.
var=`echo "один два три"`
set -- $var
a=$1; b=$2; c=$3
echo "-------"
echo "a = $a" # a = один
echo "b = $b" # b = два
echo "c = $c" # c = три
# На этот раз все в порядке.
# ------------------------------
# Обратите внимание: в подоболочке 'read', для первого варианта, переменные присваиваются нормально.
# Но только в подоболочке.
a=aaa # Все сначала.
b=bbb
c=ccc
echo; echo
echo "один два три" | ( read a b c;
echo "Внутри подоболочки: "; echo "a = $a"; echo "b = $b"; echo "c = $c" )
# a = один
# b = два
# c = три
echo "-------"
echo "Снаружи: "
echo "a = $a" # a = aaa
echo "b = $b" # b = bbb
echo "c = $c" # c = ccc
echo
exit 0
Огромный риск, для безопасности системы, представляет использование в скриптах команд, с установленным битом "suid"[ 61 ].
Использование сценариев в качестве CGI-приложений может приводить к серьезным проблемам из-за отсутствия контроля типов переменных. Более того, они легко могут быть заменены взломщиком на его собственные сценарии.
Bash не совсем корректно обрабатывает строки, содержащие двойной слэш (//).
Сценарии на языке Bash, созданные для Linux или BSD систем, могут потребовать доработки, перед тем как они смогут быть запущены в коммерческой версии UNIX. Такие сценарии, как правило, используют GNU-версии команд и утилит, которые имеют лучшую функциональность, нежели их аналоги в UNIX. Это особенно справедливо для таких утилит обработки текста, как tr.
Danger is near thee --
Beware, beware, beware, beware.
Many brave hearts are asleep in the deep.
So beware --
Beware.
A.J. Lamb and H.W. Petrie
- Пример 31-1. Западня в подоболочке
- Пример установочного скрипта
- Пример из практики
- Класс StreamReader
- Передача прав
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Включение и отключение синхронного вывода
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- How to read