Inferno man pages -1 - sh / Руководство по ОС Inferno - раздел 1 - sh: Chapter 1
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Inferno's SH(1) rapidfx 14.04.09 в 04:57 |
|
|
ИМЯ rapidfx 14.04.09 в 04:58 |
||
|
sh, builtin, exit, load, loaded, local, whatis, quote, run, set, unload, unquote - командный язык rapidfx 14.04.09 в 04:59 |
||
|
КРАТКИЙ ОБЗОР rapidfx 14.04.09 в 05:00 |
||
|
sh [-ilxvn ] [ -c command ] [ file [ arg ... ] rapidfx 14.04.09 в 05:00 |
||
|
ОПИСАНИЕ rapidfx 14.04.09 в 05:00 |
||
|
Sh программируемый интерфейс пользователя (оболочка) для Inferno. Он выполняет строки команд набранные в терминале или из файла, или если он используется с флагом -c, из списка аргументов. Его также можно использовать для добаления программной функциональности модулям Limbo (смотри sh(2)) rapidfx 14.04.09 в 05:04 |
||
|
Командная строка rapidfx 14.04.09 в 05:05 |
||
|
Командная строка это последовательность команд разделенных символами амперсанд или точка с запятой (& or ;), и ограниченная символом новой строки. Команды выполняются в поледовательности слева направо. Sh не ожидает окончания выполнения команды сопровождаемую знаком & перед тем выполнить новую команду. Всякий раз, когда команда сопровождаемая & выполняется, ее идентификатор процесса назначается переменной оболочки $apid. Когда же команда не сопровождаемая знаком & заканчивает свое выполнение или прерывается, переменная оболочки $status содержит сообщение process's wait (смотри prog(3)); или же это будет пустая строка если команда завершилась успешно. rapidfx 14.04.09 в 05:18 |
||
|
Символ (#) и все следующие за ним символы до конца строки (но не включая ее) игнорируются за исключением кавычек. rapidfx 14.04.09 в 05:20 |
||
|
Простые команды rapidfx 14.04.09 в 05:20 |
||
|
Простые команды это последовательность аргументов с вкраплениями перенаправления ввода-вывода. Если первый аргумент имя встроенной команды или заключенный в скобки блок команд (смотри далее "Составные команды"), они выполняются интерпретатором. Если первый символ имени скобка ({), интерпретатор пытается распознать и выполнить блок команд, если распознавание не удалось, возникает исключение. Иначе sh ищет внешнюю программу для выполнения. rapidfx 14.04.09 в 05:37 |
||
|
Если имя заканчивается на .dis, sh ищет Dis модуль с тем же именем; в противном случае он во-первых пытается найти модуль Dis в названии которого есть .dis и если это не удается, ищет исполняемый файл с тем же имененм, который должен быть скриптом доступным для чтения и исполнения. Если имя не начинается с символа обратной черты (/) или точка-слэш (./), тогда поиск имени начинается относительно каталога /dis и затем относительно текущей директории. Модуль Dis будет выполнен только если он реализует Командный Интерфейс (смотри sh(1)); файл-скрипт будет выполнен только если он начинается с символов #!'' сопровождаемые именем исполняемого файла подчинающегося правилам указанным выше. В этом случае команда будет выполнена с с любыми последующими аргументами указанными в заголовке #!, сопровождаемые путем к файлу скрита, сопровождаемые любым количеством аргументов переданных команде. rapidfx 14.04.09 в 05:53 |
||
|
Например, выполняя простую команду ls, sh ищет одну из следующих вещей, в указанном порядке, прекращая поиск если совпадение найдено: rapidfx 14.04.09 в 05:54 |
||
|
1) встроенная команда называется ls''. rapidfx 14.04.09 в 05:55 |
||
|
2) модуль Dis называется /dis/ls.dis'', rapidfx 14.04.09 в 05:55 |
||
|
3) исполняемый скрипт называется /dis/ls'', rapidfx 14.04.09 в 05:56 |
||
|
4) модуль Dis называется ./ls.dis'', rapidfx 14.04.09 в 05:56 |
||
|
5) исполняемый скрип называется ./ls''. rapidfx 14.04.09 в 05:57 |
||
|
Аргументы и переменные rapidfx 14.04.09 в 05:57 |
||
|
Несколько конструкций могут использоваться в когда синтаксис sh ожидает появление аргумента. Во многих случаях составное значение будет списком аргументов, предпочтительнее чем обычная строки. rapidfx 14.04.09 в 06:01 |
||
|
Простейшим видом аргументов будет слово не заключенное в кавычки: последовательность одного или более символов которая не содержит пробелов, символов табуляции, перевода строки или любого изследующих символов: rapidfx 14.04.09 в 06:06 |
||
|
# ; & | ^ $ ' { } ( ) < > " = rapidfx 14.04.09 в 05:57 |
||
|
Не заключенное в кавычки слово содержащее любой из символов * ? [ является шаблоном для соответствия именая файлов. Символ * заменяет любую последовательность символов, ? соответствует любому одиночному символу, и [класс] соответствует любому символу из класса. Если первый символ класса ^, класс дополнен (Поскольку этот символ особенный в интерпретаторе, он может быть включен в щаблон если этот символ заключен в кавычки, в то время как [ перед ним не в кавычках).
rapidfx 14.04.09 в 08:54 |
||
|
x=/tmp; echo $x^/*.b rapidfx 14.04.09 в 07:07 |
||
|
соответствует /tmp/*.b, а не /*.b которое потом предворяет /tmp. rapidfx 14.04.09 в 11:35 |
||
|
Слово в кавычках это последовательность символов окруженная одиночными кавычками ('). Одиночная кавычка может быть представлена окруженной двойными кавычками (''). rapidfx 14.04.09 в 12:53 |
||
|
Каждый из следующих является аргументом. rapidfx 14.04.09 в 13:46 |
||
|
(arguments) Значение последовательности аргументов заключенных в скобки состоит из списка включенных в него членов каждого из элементов последовательности. Список аргументов не является рекурсивными, хотя его синтаксис может показаться таковым. Последующие выражения совершенно идентичны. rapidfx 15.04.09 в 05:31 |
||
|
echo hi there everybody
rapidfx 14.04.09 в 13:46 |
||
|
Переводы строк внутри скобок считаются за обычный пробел, они не завершают команду. Это может оказаться полезным и дать больше свободы в разметке (расположении, размещении) комманд, принимающих в качестве аргументов несколько других команд, например, несколько подобных команд определены в sh-std(1). rapidfx 15.04.09 в 05:41 |
||
|
$argument Аргумент следующий за $ это имя переменной значение которой будет подставлено вместо имени. Возможны многоуровневые вложения. Значения переменных это списки строк. Если аргумент является числом n, значение n-ного элемента переменной $*, пока у $* не будет n элементов, в этом случае значение будет пустым. Присвоение переменным описывается ниже в разделе Присвоение. rapidfx 15.04.09 в 05:50 |
||
|
$#argument Эта переменная возвращает количество элементов в именованной переменной. Переменной никогда не назначается значение имеющее ноль элементов. rapidfx 15.04.09 в 05:53 |
||
|
$" argument Значением является строка содержащая компоненты именованной переменной разделенные пробелами. Переменная с нулевым количеством элементов порождает пустоую строку. rapidfx 15.04.09 в 05:55 |
||
|
{command} rapidfx 15.04.09 в 05:56 |
||
|
"{ command } Sh выполняет команду и считывает ее стандарный вывод. В случае использовании обратной кавычки (), он разбивается на список аргументов, используя символ $ifs как сепаратор. Если переменная $ifs не установлена, будет использовано значение ' \t\n'. В случае применения двойной кавычки ( " ) разбиение на список (токенизация) не будет сделана. rapidfx 15.04.09 в 06:00 |
||
|
argument^argument Оператор ^ соединает (производит конкатенацию) два операнда. Если два операнда имеют одинаковое число компонентов, они соединяются попарно. В противном случае, один операнд должен иметь один компонент а другой должен быть не пустым, и конкатенация будет разделительной. rapidfx 15.04.09 в 06:08 |
||
|
${command} Команда должна быть простой, не содержащей перенправлений, ее первое слово дожно быть имененм встроенного оператора. Опретор будет вызван и его значение будет подставлено в выражение. Смотрите ниже раздел Встроенные Команды для побробной информации. rapidfx 16.04.09 в 10:03 |
||
|
<{command} rapidfx 15.04.09 в 06:08 |
||
|
>{command} Команда выполняется асинхронно с перенаправленным стандартным вводом или выводом подключенного канала. Значением аргумента является имя файла ссылающегося на на другой конец канала. Таким образом можно сконструировать нелинейные каналы. Например, здесь заупускаются две команды old и new, а cmp сравнивает их вывод. rapidfx 16.04.09 в 11:08 |
||
|
cmp <{old} <{new} rapidfx 16.04.09 в 10:09 |
||
|
Free Carets / Свободная конкатенация (унаследовано от Plan9 rc) rapidfx 16.04.09 в 11:09 |
||
|
в большинстве случаев, sh будет вставлять оператор ^ между словами автоматечески между теми словами которые не разделены пробелом. Всякий раз, когда появляется один из символов $ ' и следующее за ним слово в кавычках или без; или слово в кавычках или без не содержащие пробелов и табуляции, символ ^ будет вставляться между ними. Если же слово не заключенное в кавычки непосредственно следующее за $ содержит символ отличный от арифметического, или подчеркивания _ , или *, символ ^ будет вставлен таким первым символом. Как в случае: rapidfx 16.04.09 в 11:39 |
||
|
limbo -$flags $stem.b rapidfx 16.04.09 в 10:09 |
||
|
равносильно rapidfx 16.04.09 в 10:10 |
||
|
limbo -^$flags $stem^.b rapidfx 16.04.09 в 10:09 |
||
|
Присваивание rapidfx 16.04.09 в 11:40 |
||
|
Команда в виде name=value или name:=value присваивает значение переменной окружения с указанным именем. Значением могут являться как список аргументов, так и присваиваемое выражение. Если используется := , значение сохраняется в локальной области видимости. Локальная область видимости значений создается всякий раз при вхождении в блок команд заключенных в скобки, и разрушается когда блок покидается. Если использован = , значение сохраняется в текущей области видимости (текущей из всех вложенных) содержащей определение имени переменной. rapidfx 16.04.09 в 11:47 |
||
|
Список имен так же может быть использован вместо имени, это будет причиной того, что каждый элемент значения окажется присвоенным соответствующему имени переменной в списке. Последняя переменная в списке назначается любому любому заключительному элемента в левой части. В случае, если имен переменных больше чем элементов значений, оставшимся элементам будет присвоен пустой список. Например, после присвоения: rapidfx 17.04.09 в 19:49 |
||
|
(a b c) = one two three four five rapidfx 16.04.09 в 10:09 |
