UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
for i in 1 2 3 4 5
В этой программе нужно контролировать процесс разбиения интерпретатором строк на аргументы, чтобы только символ перевода строки разделял соседние "слова".
Внутренняя переменная интерпретатора
IFS
for
IFS
$ echo 'echo $#' >nargs
$ cx nargs
$ who
you tty0 Oct 1 05:59
pjw tty2 Oct 1 11:26
$ nargs 'who'
10
$ IFS='
'
$ nargs `who`
2
$
После установки
IFS
zap
$ cat zap
# zap pat: kill all processes matching pat
# final version
PATH=/bin:/usr/bin IFS='
' # just a newline
case $1 in
"") echo 'Usage: zap [-2] pattern' 1>&2; exit 1 ;;
-*) SIG=$1; shift
esac
echo ' PID TTY TIME CMD'
kill $SIG `pick `ps -ag | egrep "$*"` | awk '{print $1}`"
$ ps -ag
PID TTY TIME CMD
...
2216 0 0:00 sleep 1000
...
$ zap sleep
PID TTY TIME CMD
2216 0 0:00 sleep 1000? y
2314 0 0:02 egrep sleep? N
$
Мы здесь кое-что добавили: необязательный аргумент, обозначающий сигнал (обратите внимание на то, что
SIG
egrep
grep
'sleep | date'
echo
ps
Вас может заинтересовать, почему эта команда называется
zap
kill
cal
kill
zap
kill
zap
ps
Измените команду
zap
ps
ps
5.7 Команда
pick
Вы уже достаточно подготовлены для того, чтобы написать команду
pick
shell
read
$ read greeting
hello, world
$ echo $greeting
hello, world
$
Самым типичным примером использования команды
read
.profile
TERM
Команда
read
for
>
<
$ read greeting </etc/passwd
goodbye
illegal io
$ echo $greeting
goodbye
$
Это можно считать ошибкой интерпретатора, но такова жизнь. К счастью, можно предусмотреть переключение в цикле, охватывающем команду
read
pick
# pick: select arguments
PATH=/bin:/usr/bin
for i # for each argument
do
echo -n "$i? " >/dev/tty