Inferno man pages -1 - sh / Руководство по ОС Inferno - раздел 1 - sh: Chapter 1
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
$a присваивается one, $b становится two, и $c содержит оставшиеся три элемента (three four five). rapidfx 17.04.09 в 19:50 |
|
|
Перенаправления ввода-вывода rapidfx 17.04.09 в 19:50 |
||
|
Выражение >file перенаправляет файл стандартного вывода (файловый дескриптор которого равен 1, обычно это терминал) в именованный файл; >> file добавляет стандартный вывод в файл. Стандартный файл ввода (файловый дескриптор равен 0, так же терминал) может быть перенаправлен из файла выражением file, которое открывает файл на чтение и на запись. Обратите внимание на то, что если в роли файла выступает заключенный в кавычки блок, перенаправление будет обработано как канал к указанной команде - и считается идентичным оператору <{} описанному выше. rapidfx 19.04.09 в 14:42 |
||
|
Перенаправления могут применяться к фаловому дескриптору отличному от ввода или вывода путем передачи числового параметра заключенного в квадратные скобки оператору перенаправления. Например, диагностический вывод (фаловый дескриптор 2) может быть перенаправлени следующим выражением: limbo junk.b >[2] junk. rapidfx 19.04.09 в 14:50 |
||
|
Файловый дескриптор может быть перенаправлен в уже открытый файл при помощи >[fd0=fd1] или <[fd0=fd1]. Fd1 это дескриптор ранее открытого файла и fd0 становится его новой копией (sys-dup(2)). rapidfx 19.04.09 в 15:11 |
||
|
Перенаправления исполняются слева направо. Поэтому limbo junk.b >/dev/null >[2=1] и limbo junk.b >[2=1] >/dev/null приводят к разным результатам: в первом случае стандартный вывод перенаправляется в /dev/null и затем перенаправляет туда же диагностический вывод, во втором случае диагностический вывод посылается на терминал ипосылает стандартный вывод на /dev/null. rapidfx 19.04.09 в 15:16 |
||
|
Составные команды rapidfx 17.04.09 в 19:55 |
||
|
Пара команд разделенных оператором канал/труба (|) это команда. Стандартный вывод левой команды посылается на стандартный ввод правой команде. Оператор канал может быть употреблен с файловыми дескрипторами. |[fd] соединяет выходной конец канала с указанным дескриптором fd отличным от 1. |[fd0=fd1] соединяет вывод fd1 левой команды и вход fd0 правой команды. rapidfx 19.04.09 в 15:24 |
||
|
Последовательность команд разделенных &, ;, или новой строкой можно сгруппировать заключив их в фигурные скобки ({}), ранее названные блоком в скобках. Блок в скобках может использоваться везде, где ожидается одно слово. Если простая команда найдена в блоке в качестве первого слова, пременной $* присваиваются все последующие аргументы, $0 устанавливается полностью всем блоком, и команды последовательно исполняются. Если блок передан в качестве аргумента, исполнения не происходит: блок конвертируется в функционально эквивалентную строку, подходящую для последующей ре-интерпретации оболочкой. Нулевая команда ({}) не имеет никакого эффекта и всегда возвращает статус nil. Например, все следующие команды производят одинаковый результат: rapidfx 19.04.09 в 16:21 |
||
|
echo hello world rapidfx 19.04.09 в 16:22 |
||
|
Важно отметить что значение переменной $* теряется всякий раз когда производится вхождение в блок, так например, следующая команда напечатает пустую строку: rapidfx 19.04.09 в 16:24 |
||
|
{{echo $*}} hello world rapidfx 19.04.09 в 15:18 |
||
|
Встроенные команды rapidfx 17.04.09 в 19:55 |
||
|
Термин "встроенная команда" использовался уже кое-где в этом документе для ссылки на команды прямо выполняющиеся интерпретатором; большинство встроенных команд определены внешне загруженными модулями; существует несколько команд которых это не касаетя, известных как "внутренние" встроенные команды, перечисленные ниже. rapidfx 19.04.09 в 16:41 |
||
|
Принимая во внимание способность sh обрабатывать составные команды (заключенные в скобки) как аргументы других команд, большая функциональность по управлению ходом выполнения, традиционно жестко вшитая в интерпретатор, в sh реализована в загружаемых модулях. Смотри подробности в sh-std(1), sh-expr(1), и sh-tk(1). rapidfx 23.04.09 в 03:31 |
||
|
Существуют два класса встроенных команд: первый класс ивестный как "встроенные", используется также как обычные команды, с той лищь разницей что встроенные команды могут вызывать исключения, тогда как внешние команды не могут, потому что они запускаются в отдельном процессе. Втророй класс, извустный как "встроенные подстановки" может быть использован как первое слово в команде в операторе ${}. Эти два класса существуют в различных пространствах имен: встроенная команда может делать совершенно другое нежели чем "встроенная подстановка" с тем же самым именем. dzenb 22.04.09 в 14:07 |
||
|
В основном, нормальные встроенные команды выполняют некоторые действия или проверку неких условий; возвращая статус нормальной встроенной команды, обычно указывая код ошибки или успешное выполнение. Роль встроенных подстановок выдать занчение (возможно даже список) который подставляется в это место как список аргументов команды. rapidfx 23.04.09 в 03:43 |
||
|
Команда @ rapidfx 23.04.09 в 03:46 |
||
|
run имя_файла ... rapidfx 23.04.09 в 03:50 |
||
|
builtin команда ...
rapidfx 23.04.09 в 03:54 |
||
|
exit rapidfx 23.04.09 в 03:55 |
||
|
load путь ...
dzenb 22.04.09 в 14:20 |
||
|
unload путь... rapidfx 23.04.09 в 04:18 |
||
|
loaded rapidfx 23.04.09 в 04:21 |
||
|
whatis имя ... rapidfx 23.04.09 в 04:23 |
||
|
varname = value... Varname это не пустая переменная окружения. rapidfx 23.04.09 в 04:24 |
||
|
loadmodule; имя rapidfx 23.04.09 в 04:28 |
||
|
loadmodule;${name} rapidfx 23.04.09 в 04:31 |
||
|
builtinname rapidfx 23.04.09 в 04:33 |
||
|
${name} rapidfx 23.04.09 в 04:34 |
||
|
pathname rapidfx 23.04.09 в 04:34 |
||
|
${builtin command }
rapidfx 23.04.09 в 04:37 |
||
|
${loaded} rapidfx 23.04.09 в 05:25 |
||
|
${quotelist} rapidfx 23.04.09 в 15:06 |
||
|
${bquotelist} rapidfx 23.04.09 в 15:08 |
||
|
${unquotearg} rapidfx 23.04.09 в 15:11 |
||
|
Окружение rapidfx 17.04.09 в 19:55 |
||
|
Окружение - это список строк которые делают возможным выполнением внешних команд модулем env (смотриi env(2)). Если модуль env не существует или не загружен, то не будет никаких сообщений об ошибке, и никаких переменных не будет экспортировано во внешние команды. Sh создаст элемент окружения для каждой не пустой переменной. Они будут отформатированы так же, как если бы это было через ${quote}. Отметьте, что для того чтобы пременные были экспортированы, их имена должны быть одолетворять накладываемым ограничениям env(3), в противном случае имена не будут экспортированы. dzenb 22.04.09 в 14:53 |
||
|
Когда sh начинает выполнение, он считывает определния переменных из своего окружения. rapidfx 23.04.09 в 15:31 |
||
|
Внутри sh сохраняет контекст, который содержит набор переменных окружения, текущие флаги выполнения и список встроенных модулей. Копия создается в любом случае, когда может возникнуть параллельный доступ. Это происходит с процессами выполняющимися в каналах, процессах запущенных асинхронно с помощью &, и в любой встроенной команде которая асинхронно запускает команду оболочки. rapidfx 23.04.09 в 17:32 |
||
|
Исключения rapidfx 17.04.09 в 19:56 |
||
|
Когда sh сталкивается с ошибкой обрабатывая входной поток, возникает исключение, и если установлен флаг -v, сообщение об шибке выводится на стандарный вывод ошибок. Исключение вызывает обработку текущей команды прерывая ее и управление передается назад на стек вызовов. В интерактивном интерпретаторе главный цикл обработки команд перехватывает все исключения и устанавливает в переменной $status имя исключения. Исключения не передаются между процессами. Любая команда которая ожидает перенаправление ввода/вывода запускается в отдельном процессе, именуемом каналом (|), перенаправлениями (>, <, >>, and <>), замещениями в обраных кавычках ( , " ) и фоновые процессы (&). Исключения могут вызываться (raised) и освобождаться (rescued) используя соответственно функции raise и rescue из встроенного стандартного модуля std. (Смотри детали в sh-std(1)). rapidfx 23.04.09 в 17:46 |
||
|
parse error rapidfx 23.04.09 в 17:47 |
||
|
usage rapidfx 23.04.09 в 17:48 |
||
|
bad redir rapidfx 23.04.09 в 17:54 |
||
|
bad $ arg rapidfx 23.04.09 в 17:56 |
||
|
no pipe rapidfx 23.04.09 в 17:57 |
||
|
bad wait read rapidfx 23.04.09 в 17:57 |
||
|
builtin not found rapidfx 23.04.09 в 17:59 |
||
|
Специальные переменные rapidfx 17.04.09 в 19:56 |
