Inferno man pages -1 - sh / Руководство по ОС Inferno - раздел 1 - sh: Chapter 1

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Inferno's SH(1)

rapidfx 14.04.09 в 04:57

0

ИМЯ

rapidfx 14.04.09 в 04:58

0

sh, builtin, exit, load, loaded, local, whatis, quote, run, set, unload, unquote - командный язык

rapidfx 14.04.09 в 04:59

0

КРАТКИЙ ОБЗОР

rapidfx 14.04.09 в 05:00

0

sh [-ilxvn ] [ -c command ] [ file [ arg ... ]

rapidfx 14.04.09 в 05:00

0

ОПИСАНИЕ

rapidfx 14.04.09 в 05:00

0

Sh программируемый интерфейс пользователя (оболочка) для Inferno. Он выполняет строки команд набранные в терминале или из файла, или если он используется с флагом -c, из списка аргументов. Его также можно использовать для добаления программной функциональности модулям Limbo (смотри sh(2))

rapidfx 14.04.09 в 05:04

0

Командная строка

rapidfx 14.04.09 в 05:05

0

Командная строка это последовательность команд разделенных символами амперсанд или точка с запятой (& or ;), и ограниченная символом новой строки. Команды выполняются в поледовательности слева направо. Sh не ожидает окончания выполнения команды сопровождаемую знаком & перед тем выполнить новую команду. Всякий раз, когда команда сопровождаемая & выполняется, ее идентификатор процесса назначается переменной оболочки $apid. Когда же команда не сопровождаемая знаком & заканчивает свое выполнение или прерывается, переменная оболочки $status содержит сообщение process's wait (смотри prog(3)); или же это будет пустая строка если команда завершилась успешно.

rapidfx 14.04.09 в 05:18

0

Символ (#) и все следующие за ним символы до конца строки (но не включая ее) игнорируются за исключением кавычек.

rapidfx 14.04.09 в 05:20

0

Простые команды

rapidfx 14.04.09 в 05:20

0

Простые команды это последовательность аргументов с вкраплениями перенаправления ввода-вывода. Если первый аргумент имя встроенной команды или заключенный в скобки блок команд (смотри далее "Составные команды"), они выполняются интерпретатором. Если первый символ имени скобка ({), интерпретатор пытается распознать и выполнить блок команд, если распознавание не удалось, возникает исключение. Иначе sh ищет внешнюю программу для выполнения.

rapidfx 14.04.09 в 05:37

0

Если имя заканчивается на .dis, sh ищет Dis модуль с тем же именем; в противном случае он во-первых пытается найти модуль Dis в названии которого есть .dis и если это не удается, ищет исполняемый файл с тем же имененм, который должен быть скриптом доступным для чтения и исполнения. Если имя не начинается с символа обратной черты (/) или точка-слэш (./), тогда поиск имени начинается относительно каталога /dis и затем относительно текущей директории. Модуль Dis будет выполнен только если он реализует Командный Интерфейс (смотри sh(1)); файл-скрипт будет выполнен только если он начинается с символов #!'' сопровождаемые именем исполняемого файла подчинающегося правилам указанным выше. В этом случае команда будет выполнена с с любыми последующими аргументами указанными в заголовке #!, сопровождаемые путем к файлу скрита, сопровождаемые любым количеством аргументов переданных команде.

rapidfx 14.04.09 в 05:53

0

Например, выполняя простую команду ls, sh ищет одну из следующих вещей, в указанном порядке, прекращая поиск если совпадение найдено:

rapidfx 14.04.09 в 05:54

0

1) встроенная команда называется ls''.

rapidfx 14.04.09 в 05:55

0

2) модуль Dis называется /dis/ls.dis'',

rapidfx 14.04.09 в 05:55

0

3) исполняемый скрипт называется /dis/ls'',

rapidfx 14.04.09 в 05:56

0

4) модуль Dis называется ./ls.dis'',

rapidfx 14.04.09 в 05:56

0

5) исполняемый скрип называется ./ls''.

rapidfx 14.04.09 в 05:57

0

Аргументы и переменные

rapidfx 14.04.09 в 05:57

0

Несколько конструкций могут использоваться в когда синтаксис sh ожидает появление аргумента. Во многих случаях составное значение будет списком аргументов, предпочтительнее чем обычная строки.

rapidfx 14.04.09 в 06:01

0

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

rapidfx 14.04.09 в 06:06

0

# ; & | ^ $ ' { } ( ) < > " =

rapidfx 14.04.09 в 05:57

0

Не заключенное в кавычки слово содержащее любой из символов * ? [ является шаблоном для соответствия именая файлов. Символ * заменяет любую последовательность символов, ? соответствует любому одиночному символу, и [класс] соответствует любому символу из класса. Если первый символ класса ^, класс дополнен (Поскольку этот символ особенный в интерпретаторе, он может быть включен в щаблон если этот символ заключен в кавычки, в то время как [ перед ним не в кавычках).
Класс так же может содержать пару символов разделунных знаком -, заменяя собой все символы лексически расположенные между ними.
Символ / дожен появляться только в шаблоне. Шаблон заменяется списком аргументов, по одному на каждое совпавшее имя, за исключением того, что в случае если шаблон не соответствует ни одному имени он не заменяется на пустой список. Соответствие шаблону выполняется после других операций.

rapidfx 14.04.09 в 08:54

0

x=/tmp; echo $x^/*.b

rapidfx 14.04.09 в 07:07

0

соответствует /tmp/*.b, а не /*.b которое потом предворяет /tmp.

rapidfx 14.04.09 в 11:35

0

Слово в кавычках это последовательность символов окруженная одиночными кавычками ('). Одиночная кавычка может быть представлена окруженной двойными кавычками ('').

rapidfx 14.04.09 в 12:53

0

Каждый из следующих является аргументом.

rapidfx 14.04.09 в 13:46

0

(arguments) Значение последовательности аргументов заключенных в скобки состоит из списка включенных в него членов каждого из элементов последовательности. Список аргументов не является рекурсивными, хотя его синтаксис может показаться таковым. Последующие выражения совершенно идентичны.

rapidfx 15.04.09 в 05:31

0

echo hi there everybody
((echo) (hi there) everybody)
echo (hi there everybody )

rapidfx 14.04.09 в 13:46

0

Переводы строк внутри скобок считаются за обычный пробел, они не завершают команду. Это может оказаться полезным и дать больше свободы в разметке (расположении, размещении) комманд, принимающих в качестве аргументов несколько других команд, например, несколько подобных команд определены в sh-std(1).

rapidfx 15.04.09 в 05:41

0

$argument Аргумент следующий за $ это имя переменной значение которой будет подставлено вместо имени. Возможны многоуровневые вложения. Значения переменных это списки строк. Если аргумент является числом n, значение n-ного элемента переменной $*, пока у $* не будет n элементов, в этом случае значение будет пустым. Присвоение переменным описывается ниже в разделе Присвоение.

rapidfx 15.04.09 в 05:50

0

$#argument Эта переменная возвращает количество элементов в именованной переменной. Переменной никогда не назначается значение имеющее ноль элементов.

rapidfx 15.04.09 в 05:53

0

$" argument Значением является строка содержащая компоненты именованной переменной разделенные пробелами. Переменная с нулевым количеством элементов порождает пустоую строку.

rapidfx 15.04.09 в 05:55

0

{command}

rapidfx 15.04.09 в 05:56

0

"{ command } Sh выполняет команду и считывает ее стандарный вывод. В случае использовании обратной кавычки (), он разбивается на список аргументов, используя символ $ifs как сепаратор. Если переменная $ifs не установлена, будет использовано значение ' \t\n'. В случае применения двойной кавычки ( " ) разбиение на список (токенизация) не будет сделана.

rapidfx 15.04.09 в 06:00

0

argument^argument Оператор ^ соединает (производит конкатенацию) два операнда. Если два операнда имеют одинаковое число компонентов, они соединяются попарно. В противном случае, один операнд должен иметь один компонент а другой должен быть не пустым, и конкатенация будет разделительной.

rapidfx 15.04.09 в 06:08

0

${command} Команда должна быть простой, не содержащей перенправлений, ее первое слово дожно быть имененм встроенного оператора. Опретор будет вызван и его значение будет подставлено в выражение. Смотрите ниже раздел Встроенные Команды для побробной информации.

rapidfx 16.04.09 в 10:03

0

<{command}

rapidfx 15.04.09 в 06:08

0

>{command} Команда выполняется асинхронно с перенаправленным стандартным вводом или выводом подключенного канала. Значением аргумента является имя файла ссылающегося на на другой конец канала. Таким образом можно сконструировать нелинейные каналы. Например, здесь заупускаются две команды old и new, а cmp сравнивает их вывод.

rapidfx 16.04.09 в 11:08

0

cmp <{old} <{new}

rapidfx 16.04.09 в 10:09

0

Free Carets / Свободная конкатенация (унаследовано от Plan9 rc)

rapidfx 16.04.09 в 11:09

0

в большинстве случаев, sh будет вставлять оператор ^ между словами автоматечески между теми словами которые не разделены пробелом. Всякий раз, когда появляется один из символов $ ' и следующее за ним слово в кавычках или без; или слово в кавычках или без не содержащие пробелов и табуляции, символ ^ будет вставляться между ними. Если же слово не заключенное в кавычки непосредственно следующее за $ содержит символ отличный от арифметического, или подчеркивания _ , или *, символ ^ будет вставлен таким первым символом. Как в случае:

rapidfx 16.04.09 в 11:39

0

limbo -$flags $stem.b

rapidfx 16.04.09 в 10:09

0

равносильно

rapidfx 16.04.09 в 10:10

0

limbo -^$flags $stem^.b

rapidfx 16.04.09 в 10:09

0

Присваивание

rapidfx 16.04.09 в 11:40

0

Команда в виде name=value или name:=value присваивает значение переменной окружения с указанным именем. Значением могут являться как список аргументов, так и присваиваемое выражение. Если используется := , значение сохраняется в локальной области видимости. Локальная область видимости значений создается всякий раз при вхождении в блок команд заключенных в скобки, и разрушается когда блок покидается. Если использован = , значение сохраняется в текущей области видимости (текущей из всех вложенных) содержащей определение имени переменной.

rapidfx 16.04.09 в 11:47

0

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

rapidfx 17.04.09 в 19:49

0

(a b c) = one two three four five

rapidfx 16.04.09 в 10:09

0
Минутку...

Следующая страница →