mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      CSH(1)                                                   CSH(1)

      НАЗВАНИЕ
              csh  - интерпретатор командного языка с C-подобным син-
              таксисом C-shell

      СИНТАКСИС
      csh [-c] [-e] [-f] [-i] [-n] [-s] [-t] [-v] [-V] [-x] [-X] [аргумент...]

      ОПИСАНИЕ
	      csh - первая реализация интерпретатора командного  язы-
              ка, поддерживающего механизм протокола (см. Подстановки
              из протокола) и имеющего C-подобный синтаксис.

              При запуске csh выполняется файл  .cshrc  из  основного
              каталога пользователя. Если запуск csh происходит в мо-
              мент входа в систему (так называемый "входной" csh), то
              также выполняются команды из файла .login того же ката-
              лога. Обычно пользователи,  работающие  на  терминалах,
              помещают в своем файле .login команды установки  харак-
              теристик терминала (stty) и его типа.

              Обычно после выполнения указанных файлов csh читает ко-
              манды  с терминала, выводя в качестве приглашения текст
              "% ". Обработка аргументов  и  командных  файлов  будет
              описана ниже.

              Csh циклически выполняет следующие действия:  командная
              строка читается и делится на слова. Эта  последователь-
              ность слов помещается в протокол и затем анализируется.
              И, наконец, выполняется каждая команда из текущей стро-
              ки.

              При завершении выполнения  "входного"  csh  выполняется
              файл .logout, если такой есть в основном каталоге поль-
              зователя.

           Лексическая структура
              Csh разбивает входные строки на слова, используя в  ка-
              честве разделителей пробелы и табуляции, за исключением
              следующих случаев. Метасимволы & | ; < > ( ) и их  пары
              && || << >> являются самостоятельными словами. Метасим-
              волы могут быть лишены специального значения и включены
              в другие слова  путем  экранирования  (указания  непос-
              редственно перед ними символа \). Символ  перевод_стро-
              ки, будучи экранирован, эквивалентен пробелу.

              Цепочки символов, заключенные в парные кавычки ', ` или
              ", образуют части слова; метасимволы в этих цепочках, а
              также пробелы и табуляции,  не  являются  разделителями
              слов. Каждый тип кавычек имеет свою семантику,  которая
              будет описана ниже. Внутри пар кавычек ' или  "  символ
              перевод_строки, перед  которым  стоит  \,  представляет
              именно перевод строки.

              Если стандартным вводом csh является  не  терминал,  то
              символ # означает начало комментария, который продолжа-
              ется до конца строки. Будучи экранирован или заключен в
              кавычки, символ # теряет специальный смысл.

           Команды
              Простая команда есть последовательность слов, первое из
              которых указывает, какая именно  команда  будет  выпол-
              няться. Простая  команда,  а  также  последовательность
              простых команд, разделенных символом |,  образуют  кон-
              вейер. Стандартный вывод каждой команды конвейера, кро-
              ме последней, направляется на стандартный ввод  следую-
              щей команды. Последовательности конвейеров могут разде-
              ляться символом ;, означающим, что они будут выполнять-
              ся последовательно. Последовательность конвейеров может
              быть выполнена без ожидания ее завершения (асинхронно),
              если за ней указан символ &.

              Любая  из описанных выше последовательностей может быть
              заключена в скобки ( ),  и  тогда  она  будет  являться
              простой  командой  (которая может быть компонентом кон-
              вейера и т.д.) Возможно также использовать  в  качестве
              разделителей  конвейеров комбинации || или &&, означаю-
              щие, как и в языке C, что второй конвейер будет  выпол-
              нен  тогда и только тогда, когда выполнение первого за-
              вершилось аварийно или  нормально  соответственно  (см.
              Выражения).

           Задания
              Csh с каждым конвейером ассоциирует отдельное  задание.
              Хранится таблица текущих  заданий,  содержание  которой
              можно получить командой jobs. Каждое  задание  получает
              небольшой целочисленный номер. Если задание выполняется
              в фоновом режиме (асинхронно), csh печатает строку  ви-
              да:

                   [1] 1234

              означающую, что задание было  запущено  асинхронно  под
              номером 1 и процесс верхнего уровня для  этого  задания
              имеет идентификатор 1234.

              В csh имеется несколько  способов  ссылки  на  задания.
              Символ % начинает имя задания. Если нужно сослаться  на
              задание с номером 1, то его имя указывается как %1.

              Csh поддерживает также нотацию для текущего и  предыду-
              щего задания. В выводе команды jobs текущее задание по-
              мечается символом +, а предыдущее - символом -.  Аббре-
              виатура %+ указывает на текущее задание, а %- - на пре-
              дыдущее. Для большей аналогии с  синтаксисом  механизма
              протокола (описанного ниже), %% также означает  текущее
              задание.

           Сообщения о состоянии процесса
              Csh сразу узнает, что  состояние  какого-либо  процесса
              изменилось,  но обычно сообщает об изменении только не-
              посредственно  перед  выдачей  очередного  приглашения,
              чтобы не мешать работе пользователя. Однако, если уста-
              новлена  переменная notify, csh будет выдавать информа-
              цию обо всех изменениях состояния фоновых заданий сразу
              же. Имеется также команда notify, которая помечает про-
              цесс для немедленного вывода сообщений об изменении его
              статуса. По умолчанию notify помечает текущий  процесс;
              чтобы  пометить  фоновый  процесс, введите notify сразу
              после его запуска.

           Подстановки
              Теперь мы опишем различные трансформации,  производимые
              со входными данными.  Порядок  изложения  соответствует
              порядку выполнения трансформаций.

           Подстановки из протокола
              Подстановки из протокола подставляют слова из  предыду-
              щей командной строки в качестве частей новой,  облегчая
              тем самым повторение команд, повторение аргументов пре-
              дыдущей команды для новой, исправление ошибок в  преды-
              дущей команде при небольшом количестве нажимаемых  кла-
              виш и высокой степени уверенности. Подстановка из  про-
              токола начинается с символа ! и может  располагаться  в
              любом месте командной строки  (при  условии  отсутствия
              вложенности). Для лишения символа ! специального смысла
              его надо экранировать; для удобства он передается также
              неизменным, если за ним следует пробел, табуляция,  пе-
              ревод строки, = или (. (Подстановка из протокола  также
              производится, если строка начинается со  знака  ^.  Это
              специальное сокращение  будет  описано  позже.)  Каждая
              входная строка, содержащая  подстановку  из  протокола,
              перед выполнением выводится на терминал в том виде, ко-
              торый получился после подстановки.

              Командная строка, введенная с  терминала  и  содержащая
              одно слово или более, сохраняется в протоколе.  Подста-
              новки из протокола подставляют слова  из  протокола  во
              входной поток. Размер протокола контролируется перемен-
              ной history, но предыдущая команда сохраняется  незави-
              симо от значения этой  переменной.  Команды  нумеруются
              последовательно, начиная с единицы.

              Для определенности рассмотрим следующий  вывод  команды
              history:

                    9 write michael
                   10 ex write.c
                   11 cat oldwrite.c
                   12 diff *write.c

              Команды показываются с их номерами. Обычно нет  необхо-
              димости пользоваться этими номерами, но  текущий  номер
              команды может быть получен как часть приглашения,  если
              поместить символ ! в строку приглашения.

              В текущей команде номер 13 мы можем ссылаться на преды-
              дущие команды: по номеру: !11; указанием относительного
              адреса: !-2; указанием первого слова команды,  например
              !d для команды 12 или !wri  для  команды  9;  указанием
              строки, входящей в какое-нибудь слово команды, например
              !?mic? для той же команды 9. Каждое из этих  выражений,
              если оно не  участвует  в  дальнейших  преобразованиях,
              просто подставляет слова из указанных команд, разделен-
              ные пробелами. Комбинация символов !! ссылается на пре-
              дыдущую команду; так, указание в командной строке  лишь
              !! приведет к повторению предыдущей команды.

              Чтобы выбрать  отдельные  слова  команды,  можно  после
              ссылки на команду указать символ : и спецификатор  нуж-
              ных слов. Слова в строке нумеруются от  нуля.  Основные
              спецификаторы слов:

              0    Первое слово (команда).

              n    n-ый аргумент.

              ^    Первый аргумент.

              $    Последний аргумент.

              %    Слово, найденное  (непосредственно  предшествовав-
                   шей) операцией поиска ?цепочка?.

              x-y  Слова с x по y включительно.

              -y   Сокращение для 0-y.

              *    Сокращение для ^-$,  или  пусто,  если  в  команде
                   только один аргумент.

              x*   Сокращение для x-$.

              x-   То же, что x*, но без последнего слова.

              Символ :, отделяющий ссылку на команду от спецификатора
              слов, может быть опущен, если спецификатор начинается с
              символов ^, $, *, -, или %. После необязательного  спе-
              цификатора слов может быть  указана  последовательность
              модификаторов, перед каждым из  которых  должен  стоять
              символ :. Имеются следующие модификаторы:

              h    Удалить последнюю часть маршрутного имени, оставив
                   начальную.

              t    Удалить начальную часть маршрутного имени, оставив
                   последнюю.

              r    Удалить расширение .xxx, оставив корневое имя.

              e    Оставить только расширение .xxx.

              s/цепочка1/цепочка2/
                   Подставить цепочку1 вместо цепочки2.

              &    Повторить предыдущую подстановку.

              g    Глобальное применение  модификатора.  Используется
                   как префикс  для  модификаторов,  описанных  выше,
                   например g&.

              p    Вывести новую команду, не выполняя ее.

              q    Экранировать  подставленные  слова,   предотвращая
                   дальнейшие подстановки.

              x    То же, что и q, но произвести деление на слова  по
                   пробелам, табуляциям и переводам строк.

              Без префикса g модификатор применяется лишь  к  первому
              из указанных слов. При подстановке отсутствие  слов,  в
              которых она может быть произведена, приводит к ошибке.

              Левая часть подстановки является просто цепочкой симво-
              лов, а не регулярным выражением в смысле редакторов.  В
              качестве разделителя вместо /  может  быть  использован
              любой символ. Для включения разделителя в цепочку1  или
              цепочку2 можно экранировать его символом \. Символ &  в
              правой части заменяется текстом левой части.  Символ  \
              также экранирует &. При указании  пустой  цепочки1  ис-
              пользуется либо предыдущий модификатор s, либо  цепочка
              из контекстного поиска !?цепочка?.  Последний  раздели-
              тель при записи подстановки может быть опущен, если да-
              лее идет перевод строки; то же верно и для последнего ?
              в контекстном поиске.

              Ссылка может быть задана без номера  команды,  например
              !$. Если ранее в этой же строке была ссылка  на  другую
              команду, то ссылка без номера указывает на ту же коман-
              ду, иначе берется предыдущая команда.  Так,  !?foo?^ !$
              дает первый и последний аргументы строки, удовлетворяю-
              щей шаблону ?foo?.

              Если первым непробелом строки является ^, то имеет мес-
              то специальный случай подстановки из протокола. В  этом
              случае ^ эквивалентно !:s^ и является  удобным  началом
              для изменения текста предыдущей  строки.  Так,  ^lb^lib
              заменяет в предыдущей команде lb на lib.  Наконец,  при
              подстановках из протокола могут использоваться скобки {
              и }, если необходимо отделение от последующих символов.
              Так, после команды ls -ld  ~paul  мы  должны  выполнить
              !{l}a, чтобы получить ls -ld ~paula, тогда как при ука-
              зании !la будет искаться команда, начинающаяся с la.

           Использование кавычек ' и "
              Взятие цепочки символов в кавычки используется для  за-
              щиты от всех или от  оставшихся  подстановок.  Цепочки,
              заключенные в одинарные кавычки ', защищены от дальней-
              шей интерпретации. Цепочки, заключенные в  двойные  ка-
              вычки ", могут быть расширены как описано ниже.

              В  обоих случаях полученный текст становится словом или
              частью его; только  в  одном  специальном  случае  (см.
              Подстановка  результатов  выполнения  команд)  цепочка,
              заключенная в двойные кавычки, дает части более чем од-
              ного слова; для цепочки, заключенной в одинарные кавыч-
              ки, такого не бывает.

           Подстановка вместо кличек
              Csh поддерживает список кличек, которые могут быть  ус-
              тановлены, просмотрены и модифицированы командами alias
              и unalias. После ввода очередной командной  строки  она
              делится на отдельные команды и первое слово каждой  ко-
              манды (слева направо) анализируется: не является ли оно
              кличкой. Если является, то механизм протокола считывает
              и обрабатывает  соответствующую  этой  кличке  команду,
              сделав вид, что только что введенная команда была  вве-
              дена предыдущей. Полученные в результате слова замещают
              команду и список аргументов. Однако, если при генерации
              не было обращений к протоколу, то список аргументов ос-
              тается неизменным.

              Так, если кличке ls соответствует ls -l, то команда  ls
              /usr будет заменена на ls -l /usr; список аргументов  в
              данном случае остался тем же. Аналогично,  если  кличке
              lookup соответствует grep  !^  /etc/passwd,  то  lookup
              bill будет заменено на grep bill /etc/passwd.

              Если найдена  кличка,  то  производятся  преобразования
              входной строки и поиск  клички  производится  повторно.
              Цикл завершается, если первое слово  нового  текста  не
              является кличкой или совпадает с первым словом  старого
              текста. Другие циклы обнаруживаются и приводят к  ошиб-
              ке.

              Отметим, что csh позволяет использовать в кличках мета-
              синтаксические конструкции. Так, можно создать команду,
              выводящую на принтер свои аргументы:

                   alias print 'pr \!* | lpr'

           Подстановка переменных
              Csh поддерживает набор переменных; значением каждой  из
              них может являться список из нуля или более слов. Неко-
              торые из этих переменных csh устанавливает или  исполь-
              зует сам. Например, переменная argv имеет своим  значе-
              нием список аргументов csh и к каждому слову из ее зна-
              чения можно специальным образом получить доступ.

              Значения переменных могут быть получены и изменены  ко-
              мандами set и unset. Некоторые из переменных, на  кото-
              рые ссылается csh,  являются  переключателями:  они  не
              имеют значения, а имеют только состояние определенности
              или неопределенности. Например, переменная verbose  оп-
              ределяет, будут ли команды повторяться перед их  выпол-
              нением. Эта переменная становится определенной при ука-
              зании опции -v при запуске csh.

              Остальные операции считают переменные числовыми. Коман-
              да @ разрешает выполнять числовые операции и  результат
              присваивать переменной.  Значение  переменной,  однако,
              всегда представляется как список из 0 или более цепочек
              символов. Для целей числовых  операций  пустая  цепочка
              трактуется, как 0, а второе и  последующие  слова  мно-
              гословных переменных игнорируются.

              После того, как в исходной  строке  произведены  замены
              кличек и произведен разбор, но перед выполнением каждой
              команды, выполняется подстановка переменных, определяе-
              мая символом $. Эта подстановка может быть экранирована
              указанием  символа  \  перед  знаком доллара. Но внутри
              двойных  кавычек  подстановка  производится  всегда,  а
              внутри  одинарных - никогда. Цепочки, заключенные в об-
              ратные кавычки  `,  интерпретируются  позже  (см.  ниже
              Подстановка  результатов  выполнения команд), поэтому в
              них не  встречаются  подстановки  значений  переменных.
              Знак  $ передается неизменным, если за ним следует про-
              бел, табуляция или перевод строки.

              Переназначение ввода/вывода распознается до подстановки
              переменных, значения переменных в каждый  элемент  кон-
              вейера подставляются по отдельности, поэтому сгенериро-
              вать на этом этапе дополнительный конвейер  невозможно.
              Напротив, имя команды и список переменных  при  подста-
              новке используются вместе. Таким образом  можно  вместо
              первого слова сгенерировать более чем одно слово,  пер-
              вое из которых станет именем команды, а остальные - ар-
              гументами.

              Если не указан модификатор :q и имя переменной не  зак-
              лючено в двойные кавычки, к результатам подстановки пе-
              ременной может быть затем применена подстановка резуль-
              татов выполнения команд и генерация  имен  файлов  (см.
              ниже). В двойных кавычках переменная, значение  которой
              состоит из нескольких слов, после подстановки  образует
              простое слово (или его часть), слова из списка значений
              переменной при этом разделяются пробелами. Если  указан
              модификатор :q, переменная будет расширена в  несколько
              слов, разделенных пробелами, которые будут защищены  от
              дальнейших подстановок.

              Следующие метапоследовательности используются для подс-
              тановки значений переменных во входные строки csh. Кро-
              ме специально оговоренных случаев, обращение к перемен-
              ной, значение которой не установлено, является ошибкой.

              $имя
              ${имя}
                   Эти метапоследовательности заменяются  словами  из
                   значения переменной с данным именем, причем  слова
                   разделяются пробелами. Скобки отделяют  имя  пере-
                   менной  от  последующих  символов,  которые  иначе
                   рассматривались бы как его часть.  Имя  переменной
                   может состоять не более чем из 20 букв  и  цифр  и
                   должно начинаться с  буквы.  Символ  подчеркивания
                   считается буквой. Если имя не является  переменной
                   csh, но установлено в окружении, то  подставляется
                   значение из  окружения,  однако  при  этом  нельзя
                   пользоваться модификаторами.

              $имя[селектор]
              ${имя[селектор]}
                   Используются для выбора одного или нескольких слов
                   из списка слов, составляющих значение  имени.  Вы-
                   числение селектора может включать в  себя  подста-
                   новку переменных. Результирующее значение селекто-
                   ра должно состоять из одного числа или из двух чи-
                   сел, разделенных знаком -. Первое слово из  значе-
                   ния переменной имеет номер 1. По  умолчанию,  если
                   первое число из двух опущено,  подразумевается  1.
                   Если опущено второе число, то подразумевается $#и-
                   мя. Селектор * означает  все  слова.  Не  является
                   ошибкой определение пустого диапазона, если второй
                   индекс задан по умолчанию или находится в допусти-
                   мых пределах.

              $#имя
              ${#имя}
                   Подставляется количество слов в имени. Полезно для
                   использования в [селекторе].

              $0   Подставляется имя файла, из которого читаются  ко-
                   манды. Считается ошибкой, если имя не определено.

              $номер
              ${номер}
                   Эквивалентно $argv[номер].

              $*   Эквивалентно $argv[*].

              Модификаторы :h, :t, :r, :q, :x могут использоваться  с
              описанными выше подстановками, как и :gh,  :gt  и  :gr.
              Если используются скобки { и }, то модификаторы  должны
              указываться внутри них. Текущая реализация поддерживает
              только один модификатор на каждую подстановку.

              Следующие подстановки не допускают использования  моди-
              фикаторов.

              $?имя
              ${?имя}
                   Если имя определено, то подставляется 1, в против-
                   ном случае - 0.

              $?0  Если текущий файл ввода  определен,  подставляется
                   1, иначе - 0.

              $$   Подставляется десятичный номер родительского csh.

              $<   Подставляется строка со стандартного ввода без ка-
                   кой-либо дальнейшей интерпретации. Может быть  по-
                   лезным для ввода с клавиатуры в csh-файл.

           Подстановка результатов выполнения команд и генерация имен
           файлов
              Оставшиеся подстановки (подстановка результатов  выпол-
              нения команд и генерация имен файлов) выполняются выбо-
              рочно для аргументов встроенных команд.  Это  означает,
              что части выражений, которые не вычисляются, не подвер-
              гаются этим расширениям. Для команд, которые не являют-
              ся внутренними для csh, имя команды  подставляется  от-
              дельно от списка аргументов.  Это  происходит  довольно
              поздно, после того, как переназначен ввод/вывод, в рам-
              ках сыновнего процесса csh.

           Подстановка результатов выполнения команд
              Подстановка результатов выполнения команд  обозначается
              взятием команды в обратные кавычки `. Вывод  таких  ко-
              манд обычно делится на отдельные слова по пробелам, та-
              буляциям и переводам строк, при этом пустые слова  отб-
              расываются, и полученный  текст  замещает  исходный.  В
              двойных кавычках только перевод строки является  разде-
              лителем  слов,  пробелы  и  табуляции  оказываются   их
              частью.

              Однако одиночный заключительный перевод строки не вызы-
              вает обязательного завершения слова. Таким образом  при
              подстановке результатов выполнения команды можно сгене-
              рировать только часть слова, даже если  командой  выво-
              дится целая строка.

           Генерация имен файлов
              Если слово содержит любой из символов *, ?,  [,  {  или
              начинается с символа ~, то это слово является  кандида-
              том на генерацию из него имен файлов. Такое слово расс-
              матривается как шаблон и заменяется отсортированным  по
              алфавиту списком  имен  файлов,  удовлетворяющих  этому
              шаблону. Если нет ни одного файла, удовлетворяющего хо-
              тя бы одному шаблону из списка, фиксируется ошибка, од-
              нако необязательно, чтобы для  каждого  шаблона  имелся
              удовлетворяющий ему файл. Только символы *, ?, [ приво-
              дят к операции поиска имен файлов, удовлетворяющих шаб-
              лону, символы { и ~ относятся скорее к сокращениям.

              При поиске по шаблону символ . в начале имени файла или
              стоящий непосредственно после символа /, как и сам сим-
              вол /, должны указываться явно. Символ * обозначает лю-
              бую строку символов, в том числе  и  пустую.  Символ  ?
              обозначает любой единичный  символ.  Последовательность
              [...] обозначает один из символов, заключенных в  скоб-
              ки. Внутри скобок пара символов, разделенных знаком ми-
              нус, означает любой символ,  лексикографически  лежащий
              между данными.

              Символ ~ в начале имени файла используется  для  ссылки
              на  основной  каталог  пользователя. Если указан только
              этот символ, то есть ~, он заменяется на имя  основного
              каталога  пользователя,  хранящееся  в переменной home.
              Если после символа ~ указано имя,  состоящее  из  букв,
              цифр  и  символов  -, csh ищет пользователя с указанным
              именем и подставляет его основной каталог; так,  ~guest
              будет  расширено  до  /usr/guest,  а  ~guest/chmach  до
              /usr/guest/chmach. Если за символом ~ идет символ,  от-
              личный  от  буквы  и от /, или ~ появляется не в начале
              слова, этот символ остается неизменным.

              Выражение a{b,c,d}e является сокращением  для  abe  ace
              ade. При подстановке сохраняется порядок слева направо,
              результаты  поиска  имен файлов сортируются отдельно на
              нижнем уровне. Эта конструкция  может  быть  вложенной.
              Так,  ~guest/s1/{oldls,ls}.c  будет  расширено до /usr/
              guest/s1/oldls.c /usr/guest/s1/ls.c (даже если эти фай-
              лы и не существуют), если основной каталог пользователя
              guest есть /usr/guest. Аналогично, ../{memo,*box} будет
              расширено до ../memo ../box ../mbox (обратите внимание,
              что memo не было отсортировано  вместе  с  результатами
              сопоставления  с  шаблоном  *box).  Как частный случай,
              конструкции {, } и { } остаются неизменными.

           Ввод/вывод
              Стандартый ввод и вывод команды может быть переназначен
              следующим образом:

              < имя
                   Открыть файл с данным именем (к имени вначале при-
                   меняются подстановка переменных,  подстановка  ре-
                   зультатов выполнения команд и генерация имен  фай-
                   лов) как стандартный ввод.

              << слово
                   Читать с ввода csh до тех пор, пока не  встретится
                   строка, совпадающая со словом. К слову не применя-
                   ются подстановка переменных, подстановка результа-
                   тов выполнения команд  и  генерация  имен  файлов,
                   каждая считываемая строка сравнивается  со  словом
                   перед выполнением подстановок всех типов.  Если  в
                   слове не встречаются символы \, ", ', `, то в про-
                   межуточных строках производятся подстановки  пере-
                   менных и подстановки  результатов  выполнения  ко-
                   манд, символ \ при этом экранирует символы $, `  и
                   \. В подставляемых результатах  выполнения  команд
                   сохраняются  все  пробелы,  табуляции  и  переводы
                   строк, а последний перевод строки удаляется. Полу-
                   чившийся текст помещается в некий временный  файл,
                   который передается команде в качестве стандартного
                   ввода.

              > имя
              >! имя
              >& имя
              >!& имя
                   Имя файла, который будет использоваться в качестве
                   стандартного вывода. Если файл не  существует,  он
                   создается, если существует, то  очищается,  старое
                   содержимое при этом теряется.

                   Если определена переменная noclobber, то файл обя-
                   зан не существовать или являться байториентирован-
                   ным   устройством   (например,   терминалом    или
                   /dev/null), иначе фиксируется ошибка. Такое согла-
                   шение предохраняет от случайного  разрушения  фай-
                   лов. В этом случая использование ! служит для  по-
                   давления контроля.

                   Использование & приводит к назначению на указанный
                   файл не только стандартного вывода, но и стандарт-
                   ного протокола. Имя подвергается тем же подстанов-
                   кам, что и в случае < имя.

              >> имя
              >>! имя
              >>& имя
              >>!& имя
                   Аналогично >, но с двумя отличиями: информация по-
                   мещается в конец файла и, если определена перемен-
                   ная noclobber, то в случае отсутствия файла фикси-
                   руется ошибка, если только не использовалась форма
                   записи с !.

              Команде передается окружение, которое было в момент за-
              пуска csh, модифицированное переназначениями  ввода/вы-
              вода  и  предыдущими командами конвейера. Так, команды,
              читаемые из файла, по умолчанию не имеют доступа к это-
              му файлу, в качестве стандартного ввода  им  передается
              стандартный  ввод csh. Для использования данных из того
              же файла необходимо использовать <<. Этот механизм поз-
              воляет использовать в конвейерах командные файлы csh  и
              дает возможность csh читать со стандартного ввода с по-
              мощью блочного  ввода/вывода.  Обратите  внимание,  что
              стандартный  ввод  команды,  выполняемой асинхронно, не
              назначается на /dev/null, а  остается  тем  же,  что  и
              стандартный ввод csh. Если это терминал, то при попытке
              чтения со стандартного ввода процесс будет заблокирован
              и пользователю будет выдано сообщение (см. выше Сообще-
              ния о состоянии процесса).

              Стандартный протокол может быть направлен туда же, куда
              и стандартный вывод, с помощью |& вместо |.

           Выражения
              Некоторые из встроенных команд (которые  будут  описаны
              ниже) понимают выражения, операции в которых  сходны  с
              имеющимися в языке C, с теми же приоритетами. Выражения
              могут быть использованы в командах @, exit, if и while.
              Имеются  следующие  операции,  перечисленные  в порядке
              возрастания приоритетов:

                   ||  &&  |  ^  &  ==  !=  =~  !~  <=  >=  <  >
                   <<  >>  +  -  *  /  %  !  ~  ( )

              Укажем группы операций, имеющих одинаковый приоритет:

                   ==  !=  =~  !~
                   <=  >=  <  >
                   <<  >>
                   +  -
                   *  /  %

              Операции ==, !=, =~ и !~ сравнивают свои аргументы  как
              цепочки  символов;  все  остальные оперируют с числами.
              Операции =~ и !~ похожи на != и ==, но правый операнд в
              них  является  шаблоном  (содержащим,  например  *,  ?,
              [...])  с  которым  сопоставляется  левый  операнд. Это
              уменьшает  необходимость  в   использовании   оператора
              switch в командных файлах, когда на самом деле требует-
              ся сопоставление с шаблоном.

              Цепочки, начинающиеся с 0, рассматриваются, как восьме-
              ричные числа. Пустые и пропущенные аргументы рассматри-
              ваются, как 0. Результатами выражений являются  цепочки
              символов, представляющие десятичные числа. Важно  отме-
              тить, что никакие два компонента выражения не могут по-
              явиться в одном слове; во всех случаях, кроме тех, ког-
              да они граничат с символами &, |, <, >, (, ) они должны
              быть окружены пробелами.

              Операндами в выражениях могут выступать также результа-
              ты завершения команд, взятых в скобки { и  },  а  также
              запросы информации о файлах в виде -отношение файл, где
              отношение может быть следующим:

              r    Файл доступен на чтение.

              w    Файл доступен на запись.

              x    Файл доступен на выполнение.

              e    Файл существует.

              o    Пользователь является владельцем файла.

              z    Файл имеет нулевой размер.

              f    Файл является обычным.

              d    Файл является каталогом.

              К указанному имени применяется подстановка  результатов
              выполнения команд и генерация имен файлов, затем прове-
              ряется, верно  ли  указанное  отношение  для  реального
              пользователя. Если файл не существует  или  недоступен,
              все запросы возвращают ложь (0). Результатом завершения
              команды будет истина (1), если  команда  завершилась  с
              кодом 0, иначе возвращается ложь. Если требуется  более
              детальная информация о завершении, команду следует  вы-
              полнять вне выражения и проверять код завершения.

           Передачи управления
              Csh содержит набор команд, которые могут быть использо-
              ваны для передач управления внутри командных файлов, их
              можно с успехом использовать и при вводе  с  терминала,
              правда при этом возникают некоторые ограничения. Коман-
              ды передачи управления требуют от csh повторного чтения
              или пропуска файла ввода поэтому, из соображений реали-
              зации, имеются некоторые  ограничения  на  расположение
              ряда подобных команд.

              Команды  foreach,  switch  и  while,  а   также   форма
              if-then-else  команды  if  требуют, чтобы главное слово
              находилось на отдельной строке, как показано ниже.

              Если ввод csh не является адресуемым, csh при появлении
              цикла буферизует ввод и для реализации цикла адресуется
              к этому  внутреннему  буферу.  (Пока  позволяет  размер
              внутреннего буфера, можно выполнять передачи управления
              назад и в неадресуемом вводе.)

           Встроенные команды
              Встроенные  команды  выполняются  в  рамках  csh.  Если
              встроенная команда является  не  последним  компонентом
              конвейера, она выполняется в порожденном процессе.

              alias
              alias кличка
              alias кличка список_слов
                   Первая форма выводит все клички и  соответствующие
                   им списки слов. Вторая печатает список слов, имею-
                   щий указанную кличку. Последняя форма  присваивает
                   кличку списку_слов; список_слов при этом подверга-
                   ется подстановке результатов выполнения  команд  и
                   генерации имен файлов. В  качестве  кличек  нельзя
                   использовать слова alias и unalias.

              alloc [аргумент]
                   Показывает размер отведенной динамической  памяти,
                   как занятой, так и свободной. Если  указан  произ-
                   вольный аргумент, показывается количество  занятых
                   и свободных блоков различных размеров. Первый раз-
                   мер блока равен 8, каждый следующий равен  удвоен-
                   ному предыдущему. Вывод этой команды  может  отли-
                   чаться от описанного в  тех  системах,  в  которых
                   применена схема управления  памятью,  отличная  от
                   применяемой на компьютерах VAX.

              break
                   Приводит к передаче  управления  на  конец  самого
                   внутреннего цикла foreach или while. Оставшиеся на
                   текущей строке команды тем не  менее  выполняются.
                   Таким образом, написание нескольких  команд  break
                   на одной строке может быть использовано для выхода
                   сразу из нескольких циклов.

              breaksw
                   Приводит к выходу из переключателя (switch), пере-
                   дает управление за endsw.

              case метка:
                   Метка условия в операторе switch, описанном ниже.

              cd
              cd имя
              chdir
              chdir имя
                   Изменяет текущий каталог пользователя  на  указан-
                   ный. Если аргумент не указан, устанавливается  ос-
                   новной каталог пользователя. Если  имя  в  текущем
                   каталоге не найдено (и не начинается с /,  ./  или
                   ../), то поиск имени производится во  всех  компо-
                   нентах значения переменной cdpath. Наконец, если и
                   этот поиск безуспешен, а имя является именем пере-
                   менной csh, значение которой начинается с /, дела-
                   ется попытка установить  текущий  каталог,  равный
                   этому значению.

              continue
                   Приводит к передаче управления  на  начало  самого
                   внутреннего цикла foreach или while. Оставшиеся на
                   текущей строке команды тем не менее выполняются.

              default:
                   Помечает случай по умолчанию в  операторе  switch.
                   Он должен находиться после всех меток условия.

              dirs Печатает стек каталогов; вершина стека расположена
                   слева, первый каталог в стеке является текущим.

              else
              end
              endif
              endsw
                   См. ниже описания операторов foreach, if,  switch,
                   и while.

              eval аргумент ...
                   [Аналогично sh(1).] Аргументы читаются,  как  если
                   бы они поступали со стандартного ввода, и рассмат-
                   риваются как команды, которые выполняются в  теку-
                   щем контексте. Обычно используется для  выполнения
                   команд, сгенерированных как результаты подстановки
                   переменных и результатов  выполнения  команд,  так
                   как  грамматический  разбор  выполняется  до  этих
                   подстановок. См. также test(1).

              exec команда
                   Указанная команда подменяет текущий csh.

              exit
              exit(выражение)
                   Csh завершается либо с кодом, хранящемся  в  пере-
                   менной status (первая форма) либо с кодом,  равным
                   значению выражения (вторая форма).

              foreach имя (список_слов)
                  ...
              end
                   Переменной имя последовательно  присваиваются  все
                   слова из списка_слов и каждый раз выполняется пос-
                   ледовательность команд между  foreach  и  end.  (И
                   foreach, и end должны быть единственными командами
                   на своих строках.) Встроенная команда continue мо-
                   жет быть использована для принудительного перехода
                   к следующей итерации, а встроенная команда break -
                   для принудительного завершения цикла. Если foreach
                   вводится с терминала, все тело цикла сначала  счи-
                   тывается с приглашением ?, а затем начинается  вы-
                   полнение цикла.

              glob список_слов
                   Аналогично  echo(1), но управляющие последователь-
                   ности, заданные как \0n,  не  интерпретируются,  и
                   слова при выводе разделяются пустыми символами (то
                   есть  символами  с  нулевым кодом), что удобно для
                   программ, которые хотят использовать csh для гене-
                   рации имен файлов из списка слов.

              goto слово
                   Указанное слово подвергается подстановке результа-
                   тов выполнения команд  и  генерации  имен  файлов.
                   Формируется цепочка символов  метка.  Csh  ищет  в
                   предыдущем вводе строку формата метка:,  возможно,
                   начинающуюся с пробелов  и  табуляций.  Выполнение
                   продолжается после найденной строки.

              history
              history n
              history -r n
              history -h n
                   Показывает список команд из протокола; если указа-
                   но n, показываются последние n  команд.  Опция  -r
                   инвертирует порядок вывода команд, первыми показы-
                   ваются самые последние команды. Опция -h  приводит
                   к печати команд без их номеров. Это  используется,
                   чтобы сделать файл для команды source -h.

              if (выражение) команда
                   Если указанное выражение истинно, выполняется  ко-
                   манда  (со  своими аргументами). Подстановка пере-
                   менных в команду if производится  рано,  тогда  же
                   происходит подстановка и в команду. Команда должна
                   быть  простой,  не  допускаются  ни  конвейеры, ни
                   списки команд, ни списки команд в скобках. Обрати-
                   те внимание: переназначение ввода/вывода осуществ-
                   ляется даже если выражение ложно, то есть  команда
                   не выполняется.

              if (выражение) then
                    ...
              else if (выражение2) then
                    ...
              else
                    ...
              endif
                   Если указанное выражение истинно,  то  выполняются
                   команды до первого else; иначе если выражение2 ис-
                   тинно, выполняются команды до второго else и  т.д.
                   Допустимо любое количество пар else-if;  требуется
                   ровно один endif. Часть else может  быть  опущена.
                   (Слова else и endif  должны  появляться  в  начале
                   строк; конструкция if-then  должна  быть  одна  на
                   строке или после else.)

              jobs
              jobs -l
                   Выводит активные задания; опция -l добавляет к ин-
                   формации идентификаторы процессов.

              kill %задание
              kill -сигнал %задание ...
              kill идентификатор_процесса
              kill -сигнал идентификатор_процесса ...
              kill -l
                   Посылает сигнал завершения (15) или указанный сиг-
                   нал  указанным заданиям или процессам. Сигналы за-
                   даются номером или названием (как указано во вклю-
                   чаемом файле , только без  приставки
                   SIG).  Названия  сигналов  выводятся по kill -l. В
                   этой команде нет умолчания, то есть просто kill не
                   посылает сигнала текущему заданию.

              login
                   Завершить   "входной"   csh,   заменив   его    на
                   /bin/login. Это один из способов закончить работу,
                   сделанный для совместимости с sh(1).

              logout
                   Завершить "входной" csh. Используется, если  уста-
                   новлена переменная ignoreeof.

              notify
              notify %задание ...
                   Информировать пользователя асинхронно,  сразу  же,
                   как изменится состояние  текущего  или  указанного
                   заданий; обычно информация выдается перед  пригла-
                   шением. Информация всегда выдается асинхронно, ес-
                   ли установлена переменная notify.

              onintr
              onintr -
              onintr метка
                   Управляет действиями при прерываниях. Первая форма
                   восстанавливает  действия  по  умолчанию,  которые
                   заключаются в завершении выполнения командных фай-
                   лов и возврате на уровень ввода команд с  термина-
                   ла.  Вторая  форма onintr приводит к игнорированию
                   всех прерываний. Последняя форма приводит к выпол-
                   нению команды goto метка при получении  прерывания
                   или  завершении по прерыванию порожденного процес-
                   са.

                   В любом случае, если csh запущен асинхронно и пре-
                   рывания уже игнорируются, все формы onintr не име-
                   ют смысла и прерывания  продолжают  игнорироваться
                   как в csh, так и во всех запускаемых командах.

              popd
              popd +n
                   Вытолкнуть элемент из стека каталогов,  перейдя  к
                   новому каталогу. С аргументом +n удаляет n-ый эле-
                   мент стека. Элементы стека нумеруются от  вершины,
                   начиная с 0.

              pushd
              pushd имя
              pushd +n
                   Без аргументов pushd меняет два  верхних  элемента
                   стека каталогов. Если аргумент указан, pushd изме-
                   няет текущий каталог (как cd)  и  помещает  старый
                   текущий каталог (из переменной cwd) в стек катало-
                   гов. С числовым аргументом, извлекает  n-ый  аргу-
                   мент стека каталогов, помещает его на вершину сте-
                   ка и устанавливает его в качестве текущего катало-
                   га. Элементы стека нумеруются от вершины,  начиная
                   с 0.

              rehash
                   Переустановить внутреннюю хэш-таблицу  содержимого
                   каталогов, содержащихся  в  переменной  path.  Это
                   требуется, если в эти каталоги добавлены новые ко-
                   манды после того, как  был  запущен  csh.  Команду
                   rehash необходимо выполнить, если Вы добавили  ка-
                   кую-нибудь команду в свой  каталог  или  системный
                   программист изменил содержимое  системных  катало-
                   гов.

              repeat число команда
                   Команда, к которой применимы  те  же  ограничения,
                   что и в команде оператора if (см. выше),  выполня-
                   ется заданное число раз. Переназначение  ввода/вы-
                   вода осуществляется ровно один раз,  включая  слу-
                   чай, когда число равно 0.

              set
              set имя
              set имя=слово
              set имя[индекс]=слово
              set имя=(список_слов)
                   Первая форма команды показывает значения всех  пе-
                   ременных csh. Значения, размер которых более одно-
                   го слова, заключаются в скобки. Вторая форма прис-
                   ваивает переменной пустую  цепочку.  Третья  форма
                   присваивает переменной одно слово. Четвертая форма
                   заменяет значение указанного компонента; этот ком-
                   понент обязан существовать. Последняя форма  прис-
                   ваивает переменной список слов. Во всех случаях  к
                   значению применяется подстановка  результатов  вы-
                   полнения команд и генерация имен файлов.

                   Аргументы могут повторяться, позволяя одной коман-
                   дой set изменить значения  нескольких  переменных.
                   Отметим, что подстановка значений переменных  про-
                   изводится для всех аргументов до выполнения  прис-
                   ваиваний.

              setenv
              setenv имя
              setenv имя значение
                   Первая форма выводит текущие значения  всех  пере-
                   менных окружения. Последняя форма присваивает зна-
                   чение   (цепочку  символов)  переменной окружения.
                   Вторая форма присваивает переменной окружения пус-
                   тую цепочку. Наиболее часто используемые  перемен-
                   ные  окружения USER, TERM и PATH автоматически им-
                   портируются  и  экспортируются  из  csh-переменных
                   user,  term,  и  path соответственно; использовать
                   для них setenv не нужно.

              shift
              shift переменная
                   Слова, составляющие значение переменной argv сдви-
                   гаются влево, удаляя argv[1]. Если  значение  argv
                   не  определено или имеет в качестве значения менее
                   одного слова, фиксируется ошибка. Вторая форма вы-
                   полняет те же действия над указанной переменной.

              source имя
              source -h имя
                   Csh читает команды из файла  имя.  Команды  source
                   могут быть вложены, однако слишком большая вложен-
                   ность может  привести  к  исчерпанию  дескрипторов
                   файлов в csh. Ошибка на любом  уровне  вложенности
                   прерывает сразу все команды source. Обычно  вводи-
                   мые по source команды не  помещаются  в  протокол,
                   опция -h вызывает помещение команд в протокол  без
                   выполнения.

              switch (цепочка)
              case метка1:
                  ...
                breaksw
              ...
              default:
                  ...
                breaksw
              endsw
                   Каждая метка условия сопоставляется с цепочкой,  к
                   которой применяется подстановка результатов выпол-
                   нения команд и генерация имен файлов. В метке  ус-
                   ловия могут использоваться символы *, ? и [...], к
                   меткам применяется подстановка  значений  перемен-
                   ных. Если ни одна из меток условий не соответству-
                   ет цепочке, выполнение  продолжается  после  метки
                   default. Каждая метка условия, в том  числе  метка
                   default, должна располагаться с начала строки. Ко-
                   манда breaksw приводит к  передаче  управления  за
                   endsw. Иначе управление  проходит  по  последующим
                   меткам (как в языке C). Если ни одна из меток  ус-
                   ловий не соответствует цепочке,  а  метка  default
                   отсутствует, управление передается за endsw.

              umask
              umask значение
                   Маска режима  создания  файлов  выводится  (первая
                   форма) или устанавливается (вторая  форма).  Маска
                   задается восьмеричными цифрами.  Обычные  значения
                   маски 002 (дает все права доступа группе и  доступ
                   на чтение и выполение остальным) или 022,  (дающий
                   все права, кроме записи, всем пользователям).

              unalias шаблон
                   Все клички, имена которых соответствуют указанному
                   шаблону, удаляются. Так, командой unalias * удаля-
                   ются вообще все  клички.  Ситуация,  когда  нечего
                   удалять, ошибкой не считается.

              unhash
                   Запретить использование внутренней хэш-таблицы для
                   ускорения поиска выполняемых программ.

              unset шаблон
                   Все переменные, имена которых  соответствуют  ука-
                   занному шаблону, удаляются. Так, командой unset  *
                   удаляются вообще все переменные;  это  приводит  к
                   очень неприятным последствиям. Ситуация, когда не-
                   чего удалять, ошибкой не считается.

              unsetenv шаблон
                   Все переменные, имена которых  соответствуют  ука-
                   занному шаблону, удаляются из окружения. См. также
                   выше команду setenv.

              wait Ожидание завершения всех фоновых  процессов.  Если
                   csh интерактивный, то по прерыванию ожидание прек-
                   ращается, а csh печатает имена и номера всех зада-
                   ний.

              while (выражение)
                  ...
              end
                   Пока  вычисление  выражения дает ненулевой резуль-
                   тат, выполняются команды между while  и  end.  Для
                   принудительного  завершения  цикла  или перехода к
                   следующей  итерации  можно  использовать   команды
                   break  и  continue.  И  while,  и  end должны быть
                   единственными командами на своих строках. При вво-
                   де цикла с терминала происходит то  же,  что  и  в
                   случае цикла foreach.

              @
              @ имя = выражение
              @ имя[индекс] = выражение
                   Первая форма  печатает  значения  всех  переменных
                   csh. Вторая форма присваивает переменной  значение
                   выражения. Если выражение содержит знаки  операций
                   <, >, & или |, то они должны обязательно оказаться
                   внутри скобок ( ). Третья форма заменяет  значение
                   указанного компонента; этот компонент  обязан  су-
                   ществовать.

                   Как и в языке C, доступны операции *=, +=  и  т.д.
                   Отделять имя от знака = пробелом  не  обязательно.
                   Пробелы, однако, обязательно должны разделять ком-
                   поненты выражения, иначе  они  будут  трактоваться
                   как одно слово.

                   Специальные постфиксные операторы ++  и  --  соот-
                   ветственно  увеличивают и уменьшают значения пере-
                   менной, например @ i++.

           Предопределенные переменные и переменные окружения
              Следующие переменные имеют для csh  специальное  значе-
              ние. Переменные argv, cwd, home, path, prompt, shell  и
              status при инициалиализации устанавливаются всегда. Пе-
              ременные cwd и status изменяются автоматически, осталь-
              ные - только по указанию пользователя.

              Csh копирует значение переменной окружения USER в  свою
              переменную user, TERM - в term и HOME - в home, при из-
              менении значения этих переменных csh  производится  об-
              ратное копирование. То же происходит с переменной окру-
              жения PATH; не надо все время заботиться о присваивании
              этих  переменных,  достаточно  их  определить  в  файле
              .cshrc; порожденные процессы импортируют значение  path
              из окружения и реэкспортируют его в случае изменения.

              Итак, опишем значения специальных переменных csh.

              argv Значение этой  переменной  устанавливается  равным
                   значению аргументов запуска csh.  Именно  из  этой
                   переменной  подставляются  позиционные  параметры,
                   то есть $1 заменяется на $argv[1] и т.д.

              cdpath
                   Список каталогов,  в  которых  производится  поиск
                   подкаталогов командой chdir.

              cwd  Полное маршрутное имя текущего каталога.

              echo Устанавливается, если при вызове csh указана опция
                   -x. Вызывает выдачу каждой команды перед  выполне-
                   нием. Для невстроенных команд все подстановки про-
                   изводятся перед выдачей. Встроенные команды  выда-
                   ются перед применением подстановок результатов вы-
                   полнения команд и генерацией имен файлов, так  как
                   эти подстановки проводятся затем избирательно.

              histchars
                   Этой переменной можно присвоить  цепочку  из  двух
                   символов, которые задают подстановки из протокола.
                   Первый символ замещает используемый  по  умолчанию
                   символ !. Второй символ замещает символ ^ в  быст-
                   рых подстановках.

              history
                   Может быть задано числовое  значение,  управляющее
                   размером протокола. Слишком большое значение может
                   привести к переполнению памяти.  Последняя  выпол-
                   ненная команда всегда сохраняется в протоколе.

              home Основной каталог пользователя, инициализируемый из
                   окружения. Символ ~ при генерации имен файлов ссы-
                   лается на эту переменную.

              ignoreeof
                   Если значение этой переменной установлено, то  csh
                   игнорирует конец файла для вводных  устройств-тер-
                   миналов. Это предохраняет от случайного завершения
                   csh с помощью CTRL+D.

              mail Имена файлов, в которых csh ищет письма. Поиск пи-
                   сем производится с некоторым временным  интервалом
                   перед выдачей приглашения после завершения команд.
                   Если найден файл, имеющий  время  доступа  меньшее
                   или равное времени модификации, выдается сообщение
                   You have new mail.

                   Если первое слово значения переменной mail являет-
                   ся числом, оно задает интервал опроса писем, в се-
                   кундах. Значение по умолчанию равно 10 минутам.

                   Если указано несколько файлов для поиска,  сообще-
                   ние будет выглядеть, как New  mail  in  имя_файла,
                   если письмо обнаружено в файле имя_файла.

              noclobber
                   Как уже упоминалось в разделе "Ввод/вывод", на пе-
                   реназначение вывода накладываются ограничения, да-
                   ющие гарантию, что файлы не будут случайно  разру-
                   шены и что >> ссылаются на существующие файлы.

              notify
                   Если эта переменная  установлена,  csh  асинхронно
                   информирует о завершениях  заданий.  По  умолчанию
                   информация выдается перед приглашением.

              path Каждое слово переменной path задает каталог, в ко-
                   тором ищутся команды для выполнения. Пустое  слово
                   означает текущий каталог. Если переменная path  не
                   определена, все маршрутные имена должны быть  пол-
                   ными. Обычное значение для переменной path  -  это
                   ., /bin и /usr/bin, но  в  разных  системах  могут
                   быть разные соглашения. Для суперпользователя спи-
                   сок поиска по умолчанию - /etc, /bin  и  /usr/bin.
                   Если при запуске csh не указаны опции -c и -t, со-
                   держимое каталогов из переменной  path  хешируется
                   после чтения файла .cshrc и при  каждом  изменении
                   переменной path. Если в указанные каталоги  добав-
                   ляются новые команды, требуется выполнить  rehash,
                   иначе команды могут быть не найдены.

              prompt
                   Цепочка символов (приглашение), которая  выводится
                   перед каждым чтением команд с терминального ввода.
                   Если в цепочке появляется символ !, он будет заме-
                   нен на текущий номер команды (если он не экраниро-
                   ван предшествующим \). Значения по умолчанию: "% "
                   для  обычного пользователя и "# " для суперпользо-
                   вателя.

              savehist
                   Задаваемое числовое значение управляет количеством
                   элементов протокола, которые сохраняются  в  файле
                   ~/.history, когда пользователь выходит из системы.
                   Все команды, на которые были ссылки  из  этих  ко-
                   манд, также сохраняются. При запуске csh  помещает
                   файл ~/.history  в  протокол  (аналогично  команде
                   source), позволяя сохранять протокол между сеанса-
                   ми. Слишком большие значения  переменной  savehist
                   замедляют запуск csh.

              shell
                   Файл, в котором находится  shell.  Используется  в
                   порожденных процессах для интерпретации файлов,  у
                   которых установлен бит выполнения, но которые  яв-
                   ляются для системы неисполняемыми. (См. ниже  опи-
                   сание выполнения внешних команд.) Инициализируется
                   в (зависящий от системы) файл, хранящий csh.

              status
                   Код завершения последней команды. Если она  завер-
                   шилась аварийно, к коду добавляется 128.  Встроен-
                   ные команды при аварийном завершении возвращают 1,
                   при нормальном - 0.

              verbose
                   Устанавливается опцией -v при запуске csh; вызыва-
                   ет печать каждой команды после завершения  подста-
                   новок из протокола.

           Выполнение внешних команд
              Если сгенерированная для выполнения команда оказывается
              не внутренней, csh  пытается  выполнить  ее  с  помощью
              execve(2). Каждое слово переменной path обозначает  ка-
              талог, из которого csh пытается выполнить команду. Если
              при запуске не указаны опции -c и -t, csh хеширует  со-
              держимое каталогов из переменной path, поэтому  попытка
              выполнения делается только для  имеющихся  команд,  что
              сильно ускоряет поиск выполняемой команды, если  список
              поиска очень длинный. Если этот  механизм  выключен  (с
              помощью unhash), или если при запуске не указаны  опции
              -c или -t, а также во всех случаях для каждой компонен-
              ты переменной path, которая не начинается с символа  /,
              csh конкатенирует компоненту  path  с  именем  команды,
              формируя маршрутное имя файла, и пытается этот файл вы-
              полнить.

              Команды, заключенные в скобки, всегда выполняются в по-
              рожденном процессе. Так, (cd; pwd); pwd печатает основ-
              ной каталог пользователя, оставляя текущий каталог  не-
              изменным и печатая его вслед за основным, а cd; pwd де-
              лает текущим основной  каталог  пользователя.  Команды,
              заключенные в скобки, обычно используются,  чтобы  пре-
              дохранить текущий csh от  изменения  текущего  каталога
              командами chdir.

              Если к файлу есть права доступа на выполнение, но он не
              является двоичным выполняемым файлом, то  предполагает-
              ся, что это командный файл и для его чтения запускается
              новый csh.

              Если слово shell является кличкой,  то  соответствующие
              ей слова при формировании команды будут подставлены пе-
              ред списком аргументов. Первое слово  при  этом  должно
              быть полным маршрутным именем командного интерпретатора
              (например, $shell). Обратите внимание, что  это  специ-
              альный случай подстановки клички,  который  выполняется
              очень поздно и позволяет только подставить слова  перед
              списком аргументов без всякой модификации.

           Обработка аргументов
              Если аргумент 0 csh равен -, то  csh  считается  "вход-
              ным". Опции интерпретируются следующим образом:

              -b   Вызывает прерывание процесса обработки опций,  ос-
                   тавшиеся аргументы не  будут  обрабатываться,  как
                   опции. Используется для передачи опций  командному
                   файлу, без опасения, что их обработает запускаемый
                   csh.

              -c   Команды читаются из (одного) файла,  имя  которого
                   следует за -c и обязано  присутствовать.  Все  ос-
                   тальные аргументы помещаются в переменную argv.

              -e   Csh завершается, если хотя бы одна из  команд  за-
                   вершается аварийно или выдает ненулевой код завер-
                   шения.

              -f   Более  быстрый запуск csh, без поиска и выполнения
                   файла .cshrc из основного каталога пользователя.

              -i   Csh является  интерактивным  и  выдает  на верхнем
                   уровне  приглашения, даже если стандартный ввод не
                   является терминалом. Без этой опции  csh  является
                   интерактивным,  только  если  стандартный  ввод  и
                   стандартный вывод назначены на терминал.

              -n   Происходит грамматический разбор команд,  без  вы-
                   полнения. Эта опция используется для  синтаксичес-
                   кой проверки командных файлов.

              -s   Исходная информация для команд  берется  со  стан-
                   дартного ввода.

              -t   Из файла ввода считывается и выполняется ровно од-
                   на строка. В ней может использоваться символ \ для
                   экранирования перевода строки и продолжения коман-
                   ды на следующей строке.

              -v   Устанавливает переменную verbose; вызывает  печать
                   каждой команды  после  завершения  подстановок  из
                   протокола.

              -x   Устанавливает  переменную  echo.  Вызывает  выдачу
                   каждой команды перед выполнением.

              -V   Устанавливает  переменную  verbose  до  выполнения
                   файла .cshrc.

              -X   То же для -x, что -V для -v.

              После обработки опций, если остались еще аргументы и не
              было опций -c, -i, -s, или -t, первый из оставшихся ар-
              гументов берется в качестве имени файла с  выполняемыми
              командами.  Csh  открывает  этот файл, сохраняя его имя
              для возможной последующей подстановки  вместо  $0.  Так
              как  многие  системы  используют стандартный shell, ко-
              мандные файлы которого несовместимы с csh, то csh будет
              выполнять стандартный shell, если первый символ команд-
              ного файла не есть #, то есть если командый файл не на-
              чинается с комментария. Оставшиеся аргументы  инициали-
              зируют переменную argv.

           Обработка сигналов
              Обычно csh игнорирует сигналы выхода (3). Задания,  за-
              пущенные асинхронно, не получают  сигналов,  сгенериро-
              ванных с клавиатуры, в том числе сигнал 1.  Реакция  на
              остальные сигналы наследуется от родительского  процес-
              са. Обработка прерываний и сигналов  завершения  в  ко-
              мандных файлах управляется командой  onintr.  "Входной"
              csh перехватывает сигнал завершения, остальные передают
              реакцию на него порожденным процессам в том же  состоя-
              нии, что получили от родителей. В любом случае прерыва-
              ния запрещены  во  время  чтения  "входным"  csh  файла
              .logout.

      ФАЙЛЫ
              ~/.cshrc     Читается в начале выполнения каждым csh.
              ~/.login     Читается  "входным"   csh   после   чтения
                           .cshrc.
              ~/.logout    Читается  "входным" csh при завершении.
              /bin/sh      Стандартный shell для командных файлов, не
                           начинающихся с #.
              /tmp/sh*     Временные файлы для <<.
              /etc/passwd  Источник информации об основных  каталогах
                           пользователей для подстановки ~имя_файла.

      ОГРАНИЧЕНИЯ
              Слова не могут быть длиннее 1024 символов. Система  ог-
              раничивает список аргументов 10240 символами. Число ар-
              гументов в команде,  к  которой  применяется  генерация
              имен файлов, ограничено 1/6 от числа символов, допусти-
              мых в списке аргументов. Подстановка результатов выпол-
              нения команд не может подставить больше  символов,  чем
              допустимо в списке аргументов. Для обнаружения зацикли-
              вания csh ограничивает число подстановок вместо  кличек
              в одной строке двадцатью.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк