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

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

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

$a присваивается one, $b становится two, и $c содержит оставшиеся три элемента (three four five).

rapidfx 17.04.09 в 19:50

0

Перенаправления ввода-вывода

rapidfx 17.04.09 в 19:50

0

Выражение >file перенаправляет файл стандартного вывода (файловый дескриптор которого равен 1, обычно это терминал) в именованный файл; >> file добавляет стандартный вывод в файл. Стандартный файл ввода (файловый дескриптор равен 0, так же терминал) может быть перенаправлен из файла выражением file, которое открывает файл на чтение и на запись. Обратите внимание на то, что если в роли файла выступает заключенный в кавычки блок, перенаправление будет обработано как канал к указанной команде - и считается идентичным оператору <{} описанному выше.

rapidfx 19.04.09 в 14:42

0

Перенаправления могут применяться к фаловому дескриптору отличному от ввода или вывода путем передачи числового параметра заключенного в квадратные скобки оператору перенаправления. Например, диагностический вывод (фаловый дескриптор 2) может быть перенаправлени следующим выражением: limbo junk.b >[2] junk.

rapidfx 19.04.09 в 14:50

0

Файловый дескриптор может быть перенаправлен в уже открытый файл при помощи >[fd0=fd1] или <[fd0=fd1]. Fd1 это дескриптор ранее открытого файла и fd0 становится его новой копией (sys-dup(2)).

rapidfx 19.04.09 в 15:11

0

Перенаправления исполняются слева направо. Поэтому limbo junk.b >/dev/null >[2=1] и limbo junk.b >[2=1] >/dev/null приводят к разным результатам: в первом случае стандартный вывод перенаправляется в /dev/null и затем перенаправляет туда же диагностический вывод, во втором случае диагностический вывод посылается на терминал ипосылает стандартный вывод на /dev/null.

rapidfx 19.04.09 в 15:16

0

Составные команды

rapidfx 17.04.09 в 19:55

0

Пара команд разделенных оператором канал/труба (|) это команда. Стандартный вывод левой команды посылается на стандартный ввод правой команде. Оператор канал может быть употреблен с файловыми дескрипторами. |[fd] соединяет выходной конец канала с указанным дескриптором fd отличным от 1. |[fd0=fd1] соединяет вывод fd1 левой команды и вход fd0 правой команды.

rapidfx 19.04.09 в 15:24

0

Последовательность команд разделенных &, ;, или новой строкой можно сгруппировать заключив их в фигурные скобки ({}), ранее названные блоком в скобках. Блок в скобках может использоваться везде, где ожидается одно слово. Если простая команда найдена в блоке в качестве первого слова, пременной $* присваиваются все последующие аргументы, $0 устанавливается полностью всем блоком, и команды последовательно исполняются. Если блок передан в качестве аргумента, исполнения не происходит: блок конвертируется в функционально эквивалентную строку, подходящую для последующей ре-интерпретации оболочкой. Нулевая команда ({}) не имеет никакого эффекта и всегда возвращает статус nil. Например, все следующие команды производят одинаковый результат:

rapidfx 19.04.09 в 16:21

0

echo hello world
{echo hello world}
'{echo hello world}'
{echo $*} hello world
sh -c {echo hello world} {$*}
{echo hello world} {$*}
{{$*} {echo hello world}}
"{echo {echo hello world}}
'{echo hello' ^ ' world}' x := {echo hello world}; $x

rapidfx 19.04.09 в 16:22

0

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

rapidfx 19.04.09 в 16:24

0

{{echo $*}} hello world

rapidfx 19.04.09 в 15:18

0

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

rapidfx 17.04.09 в 19:55

0

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

rapidfx 19.04.09 в 16:41

0

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

rapidfx 23.04.09 в 03:31

0

Существуют два класса встроенных команд: первый класс ивестный как "встроенные", используется также как обычные команды, с той лищь разницей что встроенные команды могут вызывать исключения, тогда как внешние команды не могут, потому что они запускаются в отдельном процессе. Втророй класс, извустный как "встроенные подстановки" может быть использован как первое слово в команде в операторе ${}. Эти два класса существуют в различных пространствах имен: встроенная команда может делать совершенно другое нежели чем "встроенная подстановка" с тем же самым именем.

dzenb 22.04.09 в 14:07

0

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

rapidfx 23.04.09 в 03:43

0

Команда @
Выполняет команду в подпроцессе (subshell) позволяя к примеру, создать копию пространства имен и работать с ним независимо от основного командного интерпретатора.

rapidfx 23.04.09 в 03:46

0

run имя_файла ...
Выполнить команды из файла. Переменной $* присваивается оставшаяся части списка аргументов следующая за именем файла.

rapidfx 23.04.09 в 03:50

0

builtin команда ...
Команда выполняется как обычно, за исключением того, что любая команда определенная во внешнем модуле игнорируется, таким образом достигается изначально запланированноеповедение команды. Эта команда не может быть переопределена внешним модулем.

rapidfx 23.04.09 в 03:54

0

exit
Прерывает текущий процесс

rapidfx 23.04.09 в 03:55

0

load путь ...
Команда load пытается загрузить каждый свой аргумент как модуль в интерпретатор. Если модуль был успешно загружен, каждая встроенная команда определенная в модуле добавляется к списку встроенных команд. Если же существовало предыдущее определение команды, то она замещается исключение составляют встроенные в sh команды, которые скрываются и возникают вновь, когда модуль выгружается Если модуль с тем же путем был загружен то sh не будет пытаться загрузить его еще раз. В случае если путь не начинается с "/" или "./", интерпретатор просматривает стандартную директорию со встроенными модулями /dis/sh в поисках этого модуля.Если загрузка не удалась будет вызвано исключение ("bad module").
Переменная $autoload может содержать список модулей которые интерпретатор будет загружать автоматически во время своей инициализации. (Модуль загружается когда создается новый контекст:Sh->Context. Подробности смотри в sh(2))

dzenb 22.04.09 в 14:20

0

unload путь...
Выгружает загруженные ранее модули, отменяя (если они были) изменения в командах. Для успешного выполнения, путь должен быть тем же самым, как в момент осществления загрузки.

rapidfx 23.04.09 в 04:18

0

loaded
Выдает список встроенных команд определенных в настоящий момент, предварительно сопровождая именем модуля где команда была определена. Внутренне определенные команды отмечены модулем builtin.

rapidfx 23.04.09 в 04:21

0

whatis имя ...
Напечатает значение каждого имени в форме пригодной для sh.
Форма следующая:

rapidfx 23.04.09 в 04:23

0

varname = value... Varname это не пустая переменная окружения.

rapidfx 23.04.09 в 04:24

0

loadmodule; имя
Имя определяется как встроенное внешним загруженным модулем.

rapidfx 23.04.09 в 04:28

0

loadmodule;${name}
Имя определяется как встроенное замещение внешним загруженным модулем.

rapidfx 23.04.09 в 04:31

0

builtinname
Имя определяется как встроенное внутри sh.

rapidfx 23.04.09 в 04:33

0

${name}
Имя определяется как встроенное замещение внутри sh.

rapidfx 23.04.09 в 04:34

0

pathname
Полный путь внешенего файла

rapidfx 23.04.09 в 04:34

0

${builtin command }
Выполняет замещение встроенных команд что делает встроенные команды обычными
// не понял?

rapidfx 23.04.09 в 04:37

0

${loaded}
Загруженная встроенная команда производит список имен всех модулей загруженных в настоящий момент.

rapidfx 23.04.09 в 05:25

0

${quotelist}
Цитата выдается отдельным списком элементов, который будет заново обработан интерпретатором для воссоздания списка.

rapidfx 23.04.09 в 15:06

0

${bquotelist}
То же что и цитата, за исключением того что элементы списка заренее правильно сформированные командные блоки, а не цитаты.

rapidfx 23.04.09 в 15:08

0

${unquotearg}
Расквотирование (Unquote) - обратная операция квотрированию, возвращает оригинальный список значений. Список квотированный bquote может быть расквотирован обработкой интерпретатором.

rapidfx 23.04.09 в 15:11

0

Окружение

rapidfx 17.04.09 в 19:55

0

Окружение - это список строк которые делают возможным выполнением внешних команд модулем env (смотриi env(2)). Если модуль env не существует или не загружен, то не будет никаких сообщений об ошибке, и никаких переменных не будет экспортировано во внешние команды. Sh создаст элемент окружения для каждой не пустой переменной. Они будут отформатированы так же, как если бы это было через ${quote}. Отметьте, что для того чтобы пременные были экспортированы, их имена должны быть одолетворять накладываемым ограничениям env(3), в противном случае имена не будут экспортированы.

dzenb 22.04.09 в 14:53

0

Когда sh начинает выполнение, он считывает определния переменных из своего окружения.

rapidfx 23.04.09 в 15:31

0

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

rapidfx 23.04.09 в 17:32

0

Исключения

rapidfx 17.04.09 в 19:56

0

Когда sh сталкивается с ошибкой обрабатывая входной поток, возникает исключение, и если установлен флаг -v, сообщение об шибке выводится на стандарный вывод ошибок. Исключение вызывает обработку текущей команды прерывая ее и управление передается назад на стек вызовов. В интерактивном интерпретаторе главный цикл обработки команд перехватывает все исключения и устанавливает в переменной $status имя исключения. Исключения не передаются между процессами. Любая команда которая ожидает перенаправление ввода/вывода запускается в отдельном процессе, именуемом каналом (|), перенаправлениями (>, <, >>, and <>), замещениями в обраных кавычках ( , " ) и фоновые процессы (&). Исключения могут вызываться (raised) и освобождаться (rescued) используя соответственно функции raise и rescue из встроенного стандартного модуля std. (Смотри детали в sh-std(1)).
Имена исключений вызываемых sh включают в себя:

rapidfx 23.04.09 в 17:46

0

parse error
Ошибка возникающая при попытке обработать команду

rapidfx 23.04.09 в 17:47

0

usage
Встроенной команде передан неверный набор аргументов

rapidfx 23.04.09 в 17:48

0

bad redir
Возникла ошибка при открытии файлов предварительно запущенного процесса.

rapidfx 23.04.09 в 17:54

0

bad $ arg
Неверное имя было дано оператору $ или ${} .

rapidfx 23.04.09 в 17:56

0

no pipe
Sh не удалось создать канал

rapidfx 23.04.09 в 17:57

0

bad wait read
Возникла ошибка ожидания на выходе из процесса

rapidfx 23.04.09 в 17:57

0

builtin not found
Встроенная команда была назначена но не найдена

rapidfx 23.04.09 в 17:59

0

Специальные переменные

rapidfx 17.04.09 в 19:56

0
Минутку...

← Предыдущая страница

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