ая строка протокола имеет номер, что позволяет запустить ее на выполнение, указывая, например, соответствующий номер. Восклицательный знак в командной - 44 - строке служит указанием для интерпретатора, что все указан- ное далее до разделителя относится к некоторой строке прото- кола. Восклицательный знак можно указать в начале или в любом другом месте командной строки. Пусть после выполнения команды history на экран дисплея выведен следующий протокол: 1 cat file1 2 pr -w39 -l24 -2 file1 3 cc program.c >>& errors & 4 cat errors 5 ed program.c 6 history тогда, используя восклицательный знак, можно выполнить ряд действий: !2 выполнится вторая строка протокола; !! выполнится последняя строка протокола: !-2 выполнится четвертая строка (вторая от последней); !cat или !c выполнится четвертая строка. Интерпретатор просматри- вает строки протокола снизу и выполняет первую, в кото- рой найдена последовательность символов (cat или c), стоящая в начале строки; !{cat}.a1 выполнится команда cat errors.a1 - к найденной строке дописывается .a1; !?gram? выполнится пятая строка протокола. Интерпретатор выбе- рет для выполнения эту строку, так как в ней будет най- ден шаблон gram. Здесь символы ? выделяют шаблон, по которому осуществляется поиск; cat !5* !1* выполнится команда cat program.c file1 - будут подстав- лены слова пятой и первой строк протокола, исключая первые слова этих строк. Можно выбирать отдельные слова в строках протокола для включения их в командную строку. Слова командной строки нумеруются, начиная с 0. Слово с номером 0 - обычно имя команды. Слово можно выделить с помощью определителя, перед которым необходимо указать символ двоеточие, например - 45 - cat !3:1 Из третьей командной строки протокола будет выбрано слово с номером 1, получим cat program.c Рассмотрим подробнее определители слов в командных строках протокола: * или n* или n-m выбрать все слова, начиная со слова с номером 1, или выбрать все слова, начиная со слова с номером n, или выбрать все слова, начиная со слова с номером n и кон- чая словом с номером m; n или n-, или -n выбрать слово с номером n, или выбрать все слова, начи- ная со слова с номером n, не включая последнее, или выбрать все слова, начиная со слова с номером 0 до слова с номером n; ?шаблон?:% выбрать слово, соответствующее шаблону; ^ или $ слово с номером 1 или последнее слово командной строки. Разрешается не указывать двоеточие перед следующими определителями: ^ $ * - % Рассмотрим пример. Пусть после выполнения команды history на экран дисплея выведен протокол: 1 cat file1 file2 file3 2 pr -w39 -l24 -2 file1 file5 3 cc -o program1.c program2.c >>& errors & 4 cat errors 5 ed program2.c 6 history тогда интерпретатор csh выполнит команды, осуществляя подс- тановки следующим образом: !5:0 !1:3 из пятой строки выбирается слово с номером 0 ( имя команды ), из первой строки выбирается слово с номером 3. Выполнится команда ed file3; - 46 - !5:0 !1$ из пятой строки выбирается слово с номером 0, из первой строки - последнее слово. Выполнится команда ed file3; !2:-3 !3:2-3 из строки 2 выбираются слова с номерами от 0 до 3 вклю- чительно, из строки 3 выбираются слова с номерами 2 и 3. Выполнится команда: pr -w39 -l24 -2 program1.c program2.c !2-3 !?prog?% выполнится команда: pr -w39 -l24 -2 program2.c После необязательного определителя могут указываться модификаторы слов, которые позволяют выполнить ряд преобра- зований над словом, и оно подставляется в командную строку модифицированным. Модификаторы переменных были рассмотрены выше. В действиях со строками протокола можно использовать и другие модификаторы: p распечатать новую команду, но не выполнять ее; & повторить предыдущюю подстановку; s/образец_1/образец_2/ заменить образец_1 на образец_2. Символ / можно заме- нить на любой, отсутствующий в образцах. Если обра- зец_2 пустая строка, то образец_1 удаляется. Перед каждым модификатором необходимо ставить двоето- чие. Если имеется определитель слова, то модификатор должен следовать за ним. Пусть после выполнения команды history на экран дисплея выведено: 1 cat /usarc/gruppa/ivanov/file1.c 2 pr /usarc/gruppa/ivanov/file1.c 3 cc pa1.c pa2.c pa3.c pa4.c >>& errors & 4 cat errors 5 ed program.c 6 history тогда интерпретатор выполнит команды, осуществляя подста- новки и модификации, следующим образом: - 47 - !1:0 !1^:t:r выбирает из строки с номером 1 слово с номером 0, т.е. имя команды, в данном случае cat. Далее выбирает из первой строки слово с номером 1, в данном случае это /usarc/gruppa/ivanov/file1.c. Модификатор t удалит из этого слова имена каталогов, в данном случае удаляется /usarc/gruppa/ivanov, и слово теперь будет именем файла file1.c. Модификатор r удалит расширение имени файла. Таким образом, выполнится команда cat file1. !1:0 !1^:h/document по определителю ^ будет выбрано первое слово первой строки, модификатор h удалит из него имя файла, оставив имена каталогов, ведущих к нему, и выполнится команда cat /usarc/gruppa/ivanov/document !1:0 !1^:h:s?ivanov?sidorov?/document из первого слова первой строки выбираются имена катало- гов, ведущих к файлу, затем модификатор s заменит ivanov на sidorov и выполнится команда cat /usarc/gruppa/sidorov/document !1:0 !1^:h:s?ivanov?sidorov?/doc !1^:&:p первые два слова командной строки действуют аналогично предыдущему примеру. Третье слово выбирает из 1 строки протокола слово с номером 1, в нем осуществляется замена ( модификатор & ), аналогичная предыдущей, т.е. выполняется замена ?ivanov?sidorov?, сохранив все остальное в этом слове. Строка не выполняется, а только выводится на экран (модификатор p): cat /usarc/gruppa/sidorov/doc \ /usarc/gruppa/sidorov/file1.c !1:0 !3:1-4:gs?pa?ff?:p имя команды выбирается из первой строки протокола, из 3 строки выбираются все слова с номерами от 1 до 4 вклю- чительно и в них глобально (модификатор g) делается замена ?pa?ff? . Команда будет напечатана, но выпол- няться не будет (модификатор p): cat ff1.c ff2.c ff3.c ff4.c Существует также удобное средство редактирования пос- ледней строки протокола. Для этих целей используется конст- рукция ^шаблон^замена^. Допустим, последняя строка имеет вид cat aaa bbb ccc ddd, тогда после команды ^ccc^file.c^ - 48 - будет выполнена замена: cat aaa file.c ccc ddd. Имеется возможность ввести краткие обозначения для командных строк. Эти краткие обозначения называют псевдони- мами команд. Если для какой-либо командной строки установлен псевдоним, то ее выполнение теперь можно осуществлять, ука- зывая псевдоним, а не всю строку. Допустим, имеется команд- ная строка alias sp "sort \!* | print" тогда командные строки sort file1 file2 | print и sp file1 file2 тождественны. Вместо !* в командную строку будут подстав- лены имена файлов или ключи команды sort, указанные за псев- донимом sp. Интерпретатор команд ведет список псевдонимов, которые могут устанавливаться, отображаться и модифицироваться с помощью команд alias и unalias. Командная строка после просмотра разбивается на отдельные слова, каждое слово, интерпретируемое как имя команды, проверяется, чтобы выяс- нить, имеет ли оно псевдоним. Если да, это слово заменяется на значение псевдонима. Всюду в командных строках при соз- дании псевдонимов символ ! необходимо экранировать. В про- тивном случае он будет интерпретироваться как обращение к протоколу. Псевдонимы можно устанавливать и на команды csh, например alias a alias устанавливает псевдоним на команду alias. 1.12. Переменные интерпретатора csh Интерпретатор csh оперирует переменными двух видов: внутренними и внешними. Внутренние переменные устанавливают режим работы интерпретатора, а внешние в основном относятся к командным строкам, которые им интерпретируются. Обращение к переменным может быть простым (установлена переменная или нет) и сложным. Например, переменная argv представляет образ списка параметров командной строки, а переменная ver- bose является ключом и существенно лишь ее наличие или отсутствие. Особое место занимают так называемые переменные окружения. Интерпретатор считывает их значения при запуске. Значения переменных окружения становятся внутренними конс- тантами интерпретатора и их можно использовать как константы - 49 - в командных строках и командных файлах. Каждая внутренняя переменная имеет определенный смысл для интерпретатора. Часть внутренних переменных всегда устанавливается интерпре- татором при инициализации либо при запуске-завершении про- цессов. После чего переменные не будут модифицироваться, если этого не сделает пользователь. К числу внутренних переменных относятся: argv, cdpath, cwd, home, path, prompt, shell. Переменные child и status устанавливаются при порождении процессов и сохраняют свое значение до появления новых. Значения переменных устанавливаются командой set или ключом при вызове csh. Исключить переменную из числа опреде- ленных можно командой unset. Ниже приводится список внут- ренних переменных и их назначение. argv представляет строку параметров. К ней применимы подста- новки позиционных параметров. cdpath этой переменной присваивается список имен каталогов, к которым пользователь часто будет обращаться. Допустим, cdpath определена следующим образом: set cdpath = ( /usr/include /usr/lib ), тогда команда chdir sys тож- дественна команде chdir /usr/include/sys. checktime если эта переменная установлена и если в течение ука- занного времени не выполнялось каких-либо действий, то выполняется exit. Допустим, выполнена команда set checktime = 3, тогда, если в течение 3 мин не выполня- лись какие-либо действия, выполняется exit, и интерпре- татор прекращает работу. child номер процесса. Выводится на экран дисплея при запуске параллельного процесса. Значение переменной child сбра- сывается, когда этот процесс завершается. cwd значением этой переменной является строка - полное имя рабочего каталога. Это имя может не совпадать с истин- ным, если установлен symlink. echo вызывает печать каждой команды перед выполнением. Все подстановки выполняются перед выводом. Режим echo можно установить либо на все время работы, либо на период выполнения одного командного файла. Например, csh -x comfile установит режим echo на время выполнения командного файла comfile, а команда set echo - на все время работы интерпретатора. - 50 - history численное значение этой переменной устанавливает коли- чество строк, которое необходимо хранить в протоколе. Для слишком большого числа строк может не хватить памяти. Оптимальное число - 22 строки. home регистрационный каталог пользователя. Его имя считыва- ется при запуске csh из переменной окружения HOME. ignoreeof предотвращает случайное завершение работы интерпрета- тора по признаку конец файла. Этот признак выглядит как СУ/D или CTRL/D при вводе с клавиатуры дисплея. Признак конца файла можно заменить на другой командой системы stty(1). mail имя файла, в который будет поступать почта. noclobber устанавливает защиту файлов от случайного разрушения. noglob запретить расширение имен файлов. nonomatch обычно, если указанному шаблону (например, echo *.[2- 5]) не соответствует ни один образец, порождается сос- тояние ошибки. Если установлена переменная nonomatch, состояние ошибки не возникает, а указанный шаблон возв- ращается программе. notify асинхронно выводить сообщения о состояниях выполняемых процессов. Если переменная notify не установлена, эти сообщения выводятся перед выводом нового приглашения. path определяет имена каталогов, в которых интерпретатор будет искать файлы команд, запускаемых на выполнение. При запуске интерпретатора создается хеш-таблица команд из каталогов, указанных в path. Хеширование существенно сокращает время поиска команды при ее запуске. Если после входа в систему, т.е. после хеширования катало- гов, будет записана в один из них новая команда, то она будет отсутствовать в хеш-таблицах, и интерпретатор не будет ее обнаруживать. Для разрешения этой ситуации необходимо выполнить команду rehash. По команде rehash будут перестроены хеш-таблицы, и новые команды будут доступны. При запуске нового интерпретатора снова читается файл ~/.cshrc и строится хеш-таблица. На эту операцию уходит достаточно много времени и, если есть - 51 - необходимость более быстрого старта, при запуске необ- ходимо использовать ключ -f csh -f comfile Перестройка хеш-таблиц осуществляется также всякий раз, когда с помощью команды set изменяется значение пере- менной path. prompt содержит строку символов, которая выводится в качестве приглашения. Если эта строка символов включает воскли- цательный знак, на его место подставляется текущий номер командной строки. Если переменная prompt не уста- новлена, печатается приглашение % для рядового пользо- вателя и # для суперпользователя. shell содержит имя интерпретатора, который запускается при входе пользователя в систему. Имя интерпретатора ука- зано в переменной среды SHELL и считывается в начале сеанса. status принимает значение кода завершения команды, например: % false ; echo $status 1 % true ; echo $status 0 Здесь команда false возвращает 1 - код неудачного завершения, команда true возвращает 0 - код удачного завершения. time хронометрирует выполнение командных строк. Если выпол- нение продолжалось дольше указанного времени, выводятся результаты хронометрирования. Например, в файле ~/.cshrc выполнено назначение set time = 6, это значит, что интерпретатор будет выводить результаты хронометри- рования, когда время выполнения командной строки превы- сит 6 с. Если теперь выполнить команду, например, sort file, то после ее завершения будет выведен результат хронометрирования: 1.6u 17.9s 0:26 74% Здесь: 1.6u - время пользовательской фазы процесса; 17.9s - время системной фазы процесса; 0:26 - астроно- мическое время процесса; 74% - отношение в процентах суммы пользовательской и системной фаз процесса к аст- рономическому времени. - 52 - verbose устанавливает режим распечатки слов каждой команды с учетом подстановок. Этот режим можно установить, используя ключ -v при запуске интерпретатора на выпол- нение. При запуске командных файлов можно устанавливать раз- личные ключи. При этом командная строка выглядит следующим образом: csh -список_ключей имя_файла ... Если имя_файла не указано, то порождается новая интерактив- ная оболочка. Ниже перечислены ключи интерпретатора и их значения: -c считать команду из единственного параметра, указанного сразу после -c; -e интерпретатор прекращает работу, если любая вызванная команда завершается ненормально (код возврата не 0); -f запретить чтение файла ~/.cshrc для более быстрого старта; -i запустить новую оболочку как интерактивную. Если вызов интерпретатора осуществляется с клавиатуры дисплея, этот ключ устанавливается по умолчанию; -n осуществлять разбор командных строк, но не выполнять команды. Это режим отладки; -s читать из стандартного ввода; -t считывать и выполнять только одну строку. Эта строка может содержать в конце символ продолжения строки \; -v после подстановок из протокола распечатать команду перед ее выполнением; -V перед разбором строк из файлов ~/.cshrc и ~/.login установить ключ -v. Это позволит увидеть на экране дисплея, как интерпретатор устанавливает назначения и выполняет командные строки при интерпретации этих фай- лов; -x печатать на экране дисплея все команды перед выполне- нием; -X установить ключ -x при интерпретации файлов ~/.cshrc и ~./login. - 53 - Внешние переменные - это такие переменные, которые устанавливаются и используются только пользователем. В отличие от внутренних переменных и переменных окружения внешние переменные имеют тот смысл, который придается им пользователем. Значения внешних переменных могут быть уста- новлены и отображены командой set и отменены командой unset. Система поддерживает массив переменных, который назы- вают переменными среды или окружения. Переменные окружения используются системными и пользовательскими программами. Для установки значений переменных окружения используется команда setenv, для отмены - команда unsetenv. Имеется нес- колько стандартных имен переменных окружения, их значения зависят от соответствующих назначений командой setenv. Часть этих назначений происходит при открытии сеанса работы. Пользователь имеет возможность переустановить значения существующим переменным, объявить и присвоить значения новым. Значения стандартных переменных окружения использу- ются многими системными программами. Они доступны как конс- танты и программам пользователя. Важно отметить, что значе- ния переменных окружения являются внутренними константами интерпретатора. Перечисленные ниже имена зарезервированы как стандартные имена переменных окружения: PATH имена стандартных каталогов, разделенных двоеточием; HOME регистрационный каталог пользователя, установленный в файле /etc/passwd; TERM имя типа терминала; TERMCAP строка определения возможностей дисплея из файла /etc/termcap; SHELL имя интерпретатора командного языка, который инициали- зируется при входе пользователя в систему; MSG определяет, на каком языке будут выводиться сообщения пользователю при работе с системой (MSG = r - на русс- ком, MSG = l - на английском); USER регистрационное имя пользователя. Команда unsetenv удаляет добавленные во время работы переменные окружения. Команда setenv позволяет объявить и - 54 - присвоить значение новой переменной окружения % setenv NAME 15 % echo $NAME 15 % @ a = ( $NAME + 15 ) % echo $a 30 % setenv NAME "Jan Feb Mar Apr" % echo $NAME Jan Feb Mar Apr Переменные окружения отличаются от переменных интерпре- татора тем, что они не влияют на работу интерпретатора. 1.13. Специальные файлы В регистрационном каталоге пользователя размещается несколько специальных файлов: ~/.hushlogin, ~/.login, ~/.cshrc, ~/.logout и ~/.history. Файл ~/.hushlogin пустой и используется как ключ. Если он существует, при открытии сеанса работы не выводится на экран дисплея /etc/motd - файл с текстом сообщения админист- ратора. Обычно в файле /etc/motd содержаться сведения о версии системы, "вывеска" организации и т.д. При открытии сеанса работы интерпретатор читает файлы ~/.login и ~/.cshrc, а при завершении работы - файл ~/.logout. При входе пользователя в систему первым читается файл ~/.cshrc, потом ~/.login. Если в регистрационном ката- логе имеется файл ~/.history, то он считывается в протокол. Все перечисленные файлы, кроме ~/.history, являются обычными командными файлами, в которых программист определяет жела- тельные для себя действия по входу и выходу из системы. Файл ~/.login определяет те действия, которые необхо- димо выполнить в начале сеанса работы пользователя. Ниже приведен пример такого файла: set ignoreeof set prompt = 'Иванов И.И._\!> ' if( $?MAIL ) set mail = $MAIL msgs setenv MSG r В первой строке устанавливается ключ ignoreeof, который предотвращает случайное завершение работы интерпретатора при наборе на клавиатуре дисплея символа СУ/D (CTRL/D). - 55 - Во второй строке устанавливается приглашение, которое будет выдаваться при готовности принять новую командную строку. Здесь вместо \! будут подставляться текущие номера строк history, например : Иванов И.И._15> В третьей строке указывается имя почтового файла. Если он будет не пуст, то на экране дисплея появится сообщение: "У Вас есть новая почта ". Эти определения существенно зависят от версии программы mail, установленной в системе. В четвертой строке записано обращение к команде msgs, которая выдает новые информационные сообщения при входе в систему (эти сообщения заносятся администратором, сопровож- дающим операционную систему). В пятой строке определяется переменная MSG, которая определяет язык диагностик (в данном случае - русский, для английского указывется буква l). При завершении сеанса работы читается файл ~/.logout и выполняются указанные в нем действия. Список таких действий зависит исключительно от фантазии программиста. В файле ~/.logout можно разместить все команды, которые необходимо выполнить по выходу из системы. Важно отметить, что, нес- мотря на выход пользователя из системы, все процессы, запу- щенные им как асинхронные, будут продолжать выполняться. При каждом вызове csh выполняет файл ~/.cshrc. Ниже приведен пример файла ~/.cshrc: set path = ( . /bin /usr/bin /usr/ucb ) set history = 22 set savehist = 22 set checktime = 3 set prompt = 'ИВАНОВ И.И._\!> ' alias h history alias c /bin/cat alias l /bin/ls -l set path = (. /bin /usr/bin /usr/ucb) устанавливает те каталоги, где csh будет искать команды перед запуском их на выполнение. set history = 22 устанавливает количество последних командных строк, которые должны сохраняться в протоколе. set savehist = 22 устанавливает количество строк протокола, которое - 56 - необходимо запомнить в файле ~/.history. При входе в систему этот файл будет прочитан и записан в протокол. set checktime = 3 устанавливает время (3 мин), в течение которого csh может "бездействовать". Если в течение указанного вре- мени не будут выполняться какие-либо действия, то выполняется команда exit и csh прекращает работу. Такое завершение работы полезно, когда пользователю необходимо отлучиться. set prompt = 'ИВАНОВ И.И._\!>' устанавливает приглашение, которое будет выводить csh при порождении нового экземпляра интерпретатора. Сим- волы этого приглашения специально набраны заглавными буквами, чтобы у пользователя была возможность отличить основной экземпляр интерпретатора от порожденного нового. Остальные команды демонстрируют возможность использова- ния псевдонимов команд. Заметим, что файл ~/.login выполня- ется только один раз - в начале сеанса работы в системе; файл ~/.cshrc выполняется при запуске каждой новой оболочки. 1.14. Встроенные команды и операторы Ниже перечислены имена встроенных команд, их синтаксис и действие. alias alias имя alias имя список_слов команда alias позволяет устанавливать псевдонимы команд и командных строк. При обращении к командам или команд- ным строкам, для которых выполнена команда alias, можно использовать их псевдонимы. Первая форма распечатывает все псевдонимы, вторая - псевдоним для указанного имени, если он установлен, третья устанавливает псевдо- ним для заданного списка слов. В списке слов выполня- ются подстановки. alloc показывает размер используемой динамической памяти, включая используемую и свободную память, а также адрес последней ячейки памяти. Используется для отладки интерпретатора. bg bg %внутренний_идентификатор_процесса bg %шаблон_имени_процесса - 57 - переводит последний приостановленный или указанный про- цесс в асинхронный режим выполнения. break вызывает выход за end ближайшей внешней конструкции foreach или while. Можно выполнять переходы через нес- колько уровней посредством написания нескольких опера- торов break в одной строке, разделяя их символом ;. breaksw вызывает выход из оператора switch за пределы оператора endsw; case метка: метка - шаблон одного из вариантов оператора switch. В метках можно использовать шаблоны имен файлов и ката- логов ( *, ?, [...] ). Двоеточие обязательно. cd cd имя chdir chdir имя заменяет рабочий каталог на каталог имя. Если параметр отсутствует, осуществляется переход к регистрационному каталогу пользователя. continue продолжает выполнение ближайшего внешнего while или foreach. Все строки цикла до end пропускаются, и начи- нается новая итерация цикла. default: используется в switch. Если после всех проверок не нашлось варианта, совпавшего с вариантом в case, выпол- няется то, что указано в варианте default. Вариант default должен располагаться после всех case. Двоето- чие обязательно. dirs напечатать содержимое стека имен каталогов. Занесение имен каталогов в стек выполняет команда pushd, удаление имен каталогов из стека выполняется командой popd. Элементы стека нумеруются от 1, начиная от вершины стека. echo список_слов echo -n список_слов список слов записывается в стандартный вывод. Ключ -n запрещает переход на новую строку после вывода. - 58 - else end endif endsw см. ниже описание операторов foreach, if, switch и while. eval арг ... сначала производятся все подстановки, затем слово eval отбрасывается, и оставшиеся символы рассматриваются как командная строка, которая выполняется. exec команда команда запускается вместо интерпретатора. Работа интерпретатора завершается. exit exit(выражение) происходит выход из интерпретатора (первая форма) либо со значением указанного выражения (вторая форма). Зна- чение переменной status всегда равно коду возврата. fg fg %внутренний_идентификатор_процесса fg %шаблон_имени_процесса возвращает последний приостановленный (первая форма) или указанный процесс в синхронный режим выполнения. foreach имя (список_слов) ... end переменной имя последовательно присваиваются значения каждого члена списка слов и выполняется последователь- ность команд между данной командой и соответствующим оператором end (foreach и end должны находиться в отдельных строках). glob список_слов аналогична команде echo. Слова выводятся без пробела и после последнего слова не выполняется переход на новую строку. Такой вывод полезен при манипуляциях с именами файлов, когда эти имена необходимо удлинять или созда- вать новые. - 59 - goto слово оператор безусловного перехода на метку. Выполнение продолжается со строки, идущей после указанной метки. Метка должна завершаться символом :. Слово в операторе goto может быть строкой, содержащей команды, псевдонимы команд и расширения имен файлов. В этом случае метка формируется как результат интерпретации и выполнения этой строки. hashstat распечатывает строку статистики, определяющую, нас- колько эффективно внутренняя таблица хеширования разме- щает команды. Данная команда является отладочной. history history -r history n history -r n history -h выводит списки из протокола. По ключу -r строки выво- дятся в обратном порядке. Если указано число n, то выводятся только n строк протокола. С ключом -h выво- дятся строки протокола в формате файла ~/.history. if(выражение) команда если выражение истинно (не равно нулю), то выполняется команда. Команда должна быть одна. Не допускается при- менение последовательности команд и/или конвейера. Интерпретатор вычисляет истинность выражения после подстановок как в команде, так и в выражении. if(выражение_1) then ... else if(выражение_2) then ... else ... endif если значение выражения_1 истинно, выполняются команды до первого else. Иначе, если значение выражения_2 истинно, выполняются команды до второго else и т.д. Возможно любое количество пар else-if; endif нужен только один. Часть else является необязательной. Слова else и endif должны быть первыми в строках, где они указаны. if должен находиться один в строке или после else. jobs jobs -l - 60 - вывести таблицу процессов. Формат jobs -l выводит более полную информацию. Интерпретатор обеспечивает работу с внутренними и системными идентификаторами процессов. Системные идентификаторы процессов выводятся командой ps или jobs с ключом -l, внутренние - командой jobs. Пользователю предоставляется возможность не обращаться к системным идентификаторам, а указывать в командах управления процессами внутренние идентификаторы. Внут- ренний идентификатор процесса печатается в квадратных скобках. Символом + помечается последний из приоста- новленных процессов; символом - предпоследний из приос- тановленных процессов. kill %внутренний_идентификатор_процесса ... kill -SIG %внутренний_идентификатор_процесса ... kill %шаблон_имени_процесса ... kill -SIG %шаблон_имени_процесса ... kill системный_идентификатор_процесса ... kill -SIG системный_идентификатор_процесса ... kill -l если SIG не указан, то процессам посылается сигнал TERM (окончить). Сигнал SIG указывается либо числом, либо именем без шаблона SIG (как это определено в /usr/include/signal.h). kill -l выводит список имен сигналов. limit тип_ресурса максимальный_размер limit тип_ресурса limit для 32-разрядных машин существует возможность ограниче- ния ресурсов системы, выделяемых одному процессу. Ограничивается потребление текущим процессом и каждым, который создается, так, что ни один из этих процессов отдельно не превышает максимальный размер заданного ресурса. Если значение максимальный размер не задано, выводится значение текущего ограничения; если значение тип_ресурса не задано, выводятся все установленные ограничения. Текущее управление ресурсов включает время процессора cputime (максимальное число секунд центрального процессора, отводимое каждому процессу), размер файла filesize (максимальный размер одного файла, который можно создать), размер сегмента данных datasize (максимальное увеличение области данные_+_стек с помощью sbrk(2) за границу текста программы), размер стека stacksize (максимальный размер автоматически рас- ширяемой области стека), размер дампа coredumpsize (максимальный размер дампа, который будет создан). Максимальный размер ресурса может быть задан в виде числа (целого либо с точкой), за которым следует - 61 - указатель размерности. Для задания имен типов ресурсов и указателей размерности достаточно задавать уникальные шаблоны имен. login login имя по команде login завершается сеанс работы пользователя. Команду login можно выполнять без аргумента имя и с ним. Во втором случае сразу же будет запрошен входной пароль пользователя имя. logout указывает интерпретатору о необходимости прекратить работу. Читается файл ~/.logout, если он имеется, и выполняются все указанные в нем действия. Асинхронные процессы продолжают выполняться. nice nice +число nice -число nice команда nice +число команда nice -число команда команда установки приоритета. В системе используется шкала приоритетов: [-100; +100], приоритет +100 самый низкий. Первая форма устанавливает приоритет для интерпретатора, равный 4, вторая - приоритет, равный указанному числу, третья - приоритет для команды, рав- ный 4. Только администратор системы может установить отрицательный приоритет. Для выполнения запускается новый интерпретатор, который обеспечивает выполнение команды. Команда должна быть одна и не может содержать последовательность команд, конвейер или псевдоним. nohup nohup команда запрещает реакцию на сигналы SIGINT (CTRL/C), SIGQUIT (CTRL/\) и SIGHUP (BREAK - отключение удаленного терми- нала или ЭВМ по коммутируемой линии). Первая форма в командном файле устанавливает свое действие на все строки, указанные ниже. Вторая форма приводит к тому, что при выполнении указанной команды эти сигналы игно- рируются. Для всех асинхронных процессов nohup выпол- няется автоматически. - 62 - notify %внутренний_идентификатор_процесса notify %шаблон_имени_процесса notify дает команду на асинхронный вывод сообщений об измене- ниях состояния процесса. Обычно эти сообщения выво- дятся после передачи на выполнение новой командной строки. Если команда notify выполнена без аргументов, то этот режим устанавливается для всех процессов. onintr onintr - onintr метка управляет реакцией на прерывания. Первая форма уста- навливает стандартную реакцию на прерывания, которая заключается в завершении командного файла или возврате на уровень ввода терминальных команд. Вторая форма вызывает игнорирование всех прерываний. Последняя форма вызывает выполнение перехода на метку при получе- нии прерывания или при завершении порожденного процесса из-за прерывания. В любом случае, если интерпретатор csh работает асинхронно, все формы команды onintr игно- рируются. popd popd +число выполняет команду cd имя_номер_2 стека имен каталогов. Имя_номер_1 из стека имен каталогов удаляется, осталь- ные элементы стека сохраняются с новыми номерами. Форма popd +число удаляет имя_номер_(1+число) из стека, остальные элементы стека сохраняются с новыми номерами. При этом переход в другой каталог не осу- ществляется. pushd pushd имя_каталога pushd +число любая форма команды pushd меняет порядок в стеке имен каталогов. Форма pushd выполняет команду cd имя_номер_2 стека. При этом имя_номер_2 ставится в вершину, а имя_номер_1 - на его место в стеке; осталь- ные элементы стека остаются на своих местах. Форма pushd имя_каталога выполняет команду cd имя_каталога