<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d5591484190086716210\x26blogName\x3d%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D0%BA%D0%B8+ubuntu\x27%D0%B9%D1%86%D0%B0\x26publishMode\x3dPUBLISH_MODE_BLOGSPOT\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttp://tlanvar.blogspot.com/search\x26blogLocale\x3dru\x26v\x3d2\x26homepageUrl\x3dhttp://tlanvar.blogspot.com/\x26vt\x3d1840766964675028820', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script>

Записки ubuntu'йца

Делюсь вот своими наблюдашками.


Google: Прорыв в духе времени.

среда, августа 29, 2007

Попалась мне недавно книженция одна под названием "Google: Прорыв в духе времени". В электронном правда виде. Прочитал всю не отрываясь от экрана монитора. В книге рассказывается абсолютно ВСЯ история создания и развития Google. Книжка очень интересная. Всем советую прочитать. Взять можно здесь.


Ярлыки: ,


Коментариев: 1 штук(и)


Спасибо. Будем гуглить/читать =)
откоментировал: Anonymous Анонимный, 29 августа 2007 г., 11:21  


<< На главную... | << Добавить комментарий

BASH. Часть 6. Раскрытие выражений

среда, августа 22, 2007

Когда оболочка получает какую-то командную строку на выполнение, она до начала выполнения команды осуществляет "грамматический разбор" полученной командной строки. Одним из этапов такого "разбора" является раскрытие или подстановка выражений (expansion). В оболочке bash имеется семь типов подстановки выражений:

  • раскрытие скобок (brace expansion);
  • замена знака тильды (tilde expansion);
  • подстановка параметров и переменных;
  • подстановка команд;
  • арифметические подстановки (выполняемые слева направо);
  • разделение слов (word splitting);
  • раскрытие шаблонов имен файлов и каталогов (pathname expansion).
Все эти операции выполняются именно в том порядке, как они здесь перечислены. Рассмотрим их последовательно.

Раскрытие скобок

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

[user]$ mkdir /usr/local/src/bash/ {old, new, dist, bugs}
[root]# chown root /usr/{ucb/{ex, edit} , lib/{ex?.?*, how_ex}}

В первом случае в каталоге /usr/local/src/bash/ будут созданы подкаталоги old, new, dist и bugs. Во втором случае владелец будет изменен у файлов:

/usr/ucb/ex
/usr/ucb/ex
/usr/lib/ex?.?*
/usr/lib/how_ex
/usr/ucb/edit
/usr/ucb/edit
/usr/lib/ex?.?*
/usr/lib/how_ex

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

Еще один пример: строка a{d,c,b}e при раскрытии скобок превращается в три слова ade асе abe. Раскрытие скобок выполняется до выполнения других видов подстановок в командной строке, причем все специальные символы, встречающиеся в командной строке, в том числе внутри скобок, сохраняются неизменными (они будут интерпретированы на следующих этапах анализа строки).

Замена тильды

Если слово начинается с символа тильды (~), все символы до первого слэша (или все символы, если слэша нет) трактуются как имя пользователя (login name). Если это имя есть пустая строка (то есть вслед за тильдой идет сразу слэш), то тильда заменяется на значение переменной НОМЕ. Если значение переменной НОМЕ не задано, тильда заменяется на полный путь к домашнему каталогу пользователя, запустившего оболочку.

Если вслед за знаком тильды (до слэша) стоит слово, совпадающее с именем одного из легальных пользователей, тильда и имя пользователя заменяются полным именем домашнего каталога этого пользователя. Если слово, следующее за тильдой, не является именем пользователя (и не пусто), то оно остается неизменным. Если вслед за знаком тильды стоит +, эти два знака заменяются на полное имя текущего каталога (то есть значение переменной PWD). Если за знаком тильды следует -, подставляется значение переменой OLDPWD.

Подстановка параметров и переменных

Символ $ используется для обозначения операций подстановки параметров, подстановки команд и подстановок арифметических выражений. Выражение или имя, следующее за $, может быть заключено в скобки; что необязательно, но удобно, т. к. позволяет отделить заменяемое выражение от следующих за ним слов или символов. Таким образом, чтобы в командной строке вызвать значение параметра (в частности, любой переменной), нужно вставить выражение вида $ {parameter}. Скобки необходимы только в том случае, если имя параметра состоит из нескольких цифр, или когда за именем следует символ, который не должен интерпретироваться как часть имени. Все значения переменных подвергаются подстановке знака тильды, раскрытию параметров и переменных, подстановке команд, подстановкам арифметических выражений, а также удалению специальных символов цитирования (см. ниже). Разделение слов не производится, за исключением случая "$@" (объяснение ниже ). Раскрытие шаблонов имен файлов и каталогов не производится.

Подстановка команд

Подстановка команд является очень мощным инструментом bash. Она заключается в замене имени команды на результат ее выполнения. Существует две формы подстановки команд:

$(command) и 'command'

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

Арифметичекие подстановки

Арифметические подстановки позволяют вычислить значение арифметического выражения и подставить вместо него результат. Существует две формы задания арифметических подстановок:

$[expression]
$((expression))

где expression трактуется так, как если бы оно было заключено в двойные кавычки, но встречающиеся в expression двойные кавычки трактуются как простой литерал. Внутри expression выполняются подстановки параметров и команд.
Синтаксис выражения expression подобен синтаксису арифметических выражений в языке С, подробнее об этом можно прочитать в разделе ARITHMETIC EVALUATION man-страницы по команде bash. Например, команда

[user]$ echo $ ((2 + 3 * 5))

в качестве результата выдает "17". Если выражение некорректно, bash выдает сообщение об ошибке.

Разделение слов

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

Раскрытие шаблонов имен файлов и каталогов

Подстановки имен путей и файлов (pathname expansion) используются для того, чтобы с помощью краткого образца или шаблона указать несколько имен файлов (или каталогов), соответствующих данному шаблону. После разделения слов, если не была задана опция -f, bash производит поиск в каждом слове командной строки символов *, ? и [. Если будет найдено слово с одним или несколькими вхождениями таких символов, то это слово рассматривается как шаблон, который должен быть заменен словами из лексикографически упорядоченного списка имен путей, соответствующих данному шаблону. Если имен, соответствующих шаблону, не найдено, и переменная nullglob не задана, слово не изменяется. Если эта переменная установлена, а путей, соответствующих шаблону, не найдено, слово удаляется из командной строки. Специальные символы шаблонов имеют следующее значение:

Символы шаблонов

* - Соответствует произвольной строке символов, включая пустую строку. Например, my*.txt будет заменено на myday.txt, myweek.txt и mymonth.txt (если такие файлы существуют), a *.jpg соответствует всем файлам с расширением jpg в указанном каталоге

? - Соответствует любому одиночному символу. Например, вместо шаблона file?.txt будут подставлены имена file1.txt и filex.txt, но не file10.txt

[...] - Соответствует любому символу из числа символов, указанных в скобках. Пары символов, разделенные знаком минуса, обозначают интервал; любой символ стоящий лексически между этими двумя символами, включая и символы, задающие интервал, соответствует шаблону. Если первым символом внутри скобок является (!) или (^), то считается, что шаблону (в данной позиции) соответствуют все символы, не указанные в скобках.

Шаблоны имен файлов очень часто применяются в командных строках, содержащих команду ls. Представьте себе, что вы хотите просмотреть информацию о содержимом каталога, в котором находится огромное количество разных файлов различных форматов, например, файлов с изображениями форматов GIF, JPEG, AVI и т. д. Чтобы получить только список файлов формата JPEG, вы можете использовать команду

[user]$ ls *.jpg

Если в каталоге имеется множество файлов, имена которых представлены четырехзначными номерами, то следующей командой можно вывести только список файлов с номерами от 0200 до 0499:

[user]$ ls -l 0[2-4]??.*

Удаление специальных символов

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

Другие части.

BASH. Часть 1. Введение.
BASH. Часть 2. Специальные символы.
BASH. Часть 3. Выполнение команд.
BASH. Часть 4. Стандартный ввод/вывод.
BASH. Часть 5. Параметры и переменные. Окружение оболочки.
BASH. Часть 6. Раскрытие выражений.

По книге В.Костромина "Linux для пользователя".

Ярлыки: , , ,


Коментариев: 0 штук(и)



<< На главную... | << Добавить комментарий

Minesweeper. Видеоролик.

четверг, августа 09, 2007

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

Смотреть тут.



Ярлыки:


Коментариев: 1 штук(и)


Хм... флешь? Жаль... не посмотрю :(
откоментировал: Blogger stalkerg, 12 августа 2007 г., 18:12  


<< На главную... | << Добавить комментарий

BASH. Часть 5. Параметры и переменные. Окружение оболочки.

вторник, августа 07, 2007

Понятие параметра в оболочке bash подобно понятию переменной в обычных языках программирования. Именем (или идентификатором) параметра может быть слово, состоящее из алфавитных символов, цифр и знаков подчеркивания (только первый символ этого слова не может быть цифрой), а также число или один из следующих специальных символов: *, @, #, ?, - (дефис), $, !, 0, _ (подчеркивание).Говорят, что параметр задан или установлен, если ему присвоено значение. Значением может быть и пустая строка. Чтобы вывести значение параметра, используют символ $ перед его именем. Так, команда

[user]$ echo name

выдаст на экран слово name, а команда

[user]$ echo $name

выдаст значение переменной name (если таковое, конечно, задано).

Разновидности параметров

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

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


*

Заменяется позиционными параметрами, начиная с первого. Если замена производится внутри двойных кавычек, то этот параметр заменяется на одно-единственное слово, составленное из всех позиционных параметров, разделенных первым символом специальной переменной IFS (о ней будет сказано ниже). То есть "$*" эквивалентно "$1с$2с. . .", где с— первый символ в значении переменной IFS. Если IFS присвоено пустое значение или ее значение не установлено, параметры разделяются пробелами

@

Заменяется позиционными параметрами, начиная с первого. Если замена производится внутри двойных кавычек, то каждый параметр заменяется отдельным словом. Так, "$@" эквивалентно "$1" "$2" ... Если позиционных параметров нет, то значение не присваивается (параметр @ просто удаляется)

#

Заменяется десятичным значением числа позиционных параметров

?

Заменяется статусом выхода последнего из выполнявшихся на переднем плане программных каналов

- (дефис)

Заменяется текущим набором значений флагов, установленных с помощью встроенной команды set или при запуске самой оболочки

$

Заменяется идентификатором процесса (PID) оболочки

!

Заменяется идентификатором процесса (PID) последней из выполняющихся фоновых (асинхронно выполнявшихся) команд

0

Заменяется именем оболочки или запускаемого скрипта. Если bash запускается для выполнения командного файла, $0 равно имени этого файла. В противном случае это значение равно полному пути к оболочке

_ (подчеркивание)

Заменяется последним аргументом предыдущей из выполнявшихся команд (если это параметр или переменная, то подставляется ее значение)


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

[user]$ name=value

где name — имя переменной, a value — присваиваемое ей значение (может быть пустой строкой). Имя переменой может состоять только из цифр и букв и не может начинаться с цифры. Значением может быть любой текст. Если значение содержит специальные символы, то его надо взять в кавычки. Присвоенное значение этих кавычек не содержит, естественно. Если переменная задана, то ее можно удалить, используя встроенную команду оболочки unset.

Набор всех установленных переменных оболочки с присвоенными им значениями называется окружением (environment) или средой оболочки. Вы можете просмотреть его с помощью команды set без параметров (только, может быть, следует организовать конвейер set | less). В выводе этой команды все переменные окружения перечисляются в алфавитном порядке. Для того чтобы просмотреть значение одной конкретной переменной, вместо команды set (в выводе которой нужную переменную еще искать и искать) можно воспользоваться командой

[user]$ echo $rame

(правда, в этом случае вы должны знать имя интересующей вас переменной).

Среди переменных, которые вы увидите в выводе команды set, встречаются очень интересные переменные. Обратите, например, внимание на переменную RANDOM. Если вы несколько раз подряд выполните команду

[user]$ echo $RANDOM

вы каждый раз будете получать новое значение. Дело в том, что эта переменная возвращает случайное целое из интервала 0—32768.

Приглашения оболочки

Одна из очень важных переменных имеет имя PS1. Эта переменная задает вид приглашения, которое bash выводит, когда ожидает ввода очередной команды пользователем. По умолчанию этой переменной присвоено значение "\s-\v\$". Вообще-то в оболочке bash существует четыре приглашения, которые используются в разных ситуациях. Переменная PS1 задает вид строки приглашения, которая выдается тогда, когда оболочка ждет ввода команды. Вторичное приглашение, задаваемое переменной PS2, появляется тогда, когда оболочка ожидает от пользователя ввода еще каких-то данных, необходимых для продолжения работы запущенной команды или программы. По умолчанию переменная PS2 имеет значение ">". Вы уже имели возможность видеть это приглашение, когда запускали команду cat для ввода данных с клавиатуры в файл. Другой пример — команда ftp, после запуска которой приглашение тоже принимает такой вид. Приглашение, задаваемое переменной РSЗ, используется в команде select.

Приглашение, задаваемое переменной PS4, выводится перед каждой командой в то время, когда bash отслеживает процесс выполнения. Значение по умолчанию - "+". Если у вас есть такое желание, вы можете изменить вид переменных PS1 и PS2. При этом можно использовать как любые символы, вводимые с клавиатуры, так и некоторое число специальных символов, которые при формировании строки приглашения декодируются в соответствии со списком, приведенной ниже (приведены только некоторые из них).

Специальные символы для формирования приглашения

- Звуковой сигнал (ASCII-код 07)
\d - Дата в формате "День, месяц, число", например, Срд, Окт, 17
\h - Имя хоста (hostname) до первой точки
\H - Полное имя хоста
\t - Текущее время в 24-часовом формате: HH:MM:SS (часы:минуты:секунды)
\T - Текущее время в 12-часовом формате: HH:MM:SS
\@ - Текущее время в 12-часовом формате АМ/РМ
\u - Имя пользователя, запустившего оболочку
\w - Полное имя текущего рабочего каталога (начиная с корня)
\W - Текущий рабочий каталог (без указания пути)
\$ - Символ #, если оболочка запущена суперпользователем, и символ $, если оболочка запущена обычным пользователем
\nnn - Символ, имеющий восьмеричный код nnn
\n - Новая строка (перевод строки)
\s - Имя оболочки
\# - Текущий номер команды
\\ - Обратный слэш (a backslash)
\[ - Начало последовательности непечатаемых символов (этот символ может быть использован для того, чтобы включить в текст подсказки последовательность управляющих символов терминала)
\1 - Конец последовательности непечатаемых символов
\! - Порядковый номер данной команды в истории команд

Текущий номер команды (порядковый номер выполняемой команды в рамках текущей сессии) может отличаться от номера данной команды в списке истории команд, поскольку последний включает в себя команды, которые были сохранены в файле истории команд. После того как значение переменной, определяющей подсказку, прочитано оболочкой, в нем могут быть произведены подстановки в соответствии с правилами расширения параметров, подстановок в именах команд и арифметических выражениях, а также разбиения слов (word splitting). Например, после выполнения команды (поскольку в строке имеется пробел, кавычки обязательны)

[root]# PSl="[\u@\h \W]\$"

в стандартном приглашении будет выводиться квадратная скобка, имя пользователя, символ @, имя компьютера, пробел, название текущего каталога (без указания пути), закрывающая квадратная скобка и символ $ (если в оболочке работает простой пользователь) или § (если оболочка запущена от имени пользователя root).

Переменная PATH

Еще одна очень важная переменная имеет имя PATH. Она задает перечень путей к каталогам, в которых bash осуществляет поиск файлов (в частности, файлов с командами) в тех случаях, когда полный путь к файлу не задан в командной строке. Отдельные каталоги в этом перечне разделяются двоеточиями. По умолчанию переменная PATH включает каталоги /usr/local/bin, /bin, /usr/bin, /usr/XHR6/bin, т. е. имеет вид:

/usr/local/bin:/bin:/usr/bin:/usr/XHR6/bin:

Для того чтобы добавить каталог в этот список, нужно выполнить следующую команду:

[root]# РАТН=$ PATH:new_path

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

Переменная IFS

Эта переменная задает разделители полей (Internal Field Separator), которые используются при операции разделения слов при преобразованиях командной строки, выполняемых оболочкой перед тем, как запустить командную строку на исполнение. Значение этой переменной по умолчанию — "<Пробел><Таb><Символ_новой_строки>.

Текущий и домашний каталоги

Имя текущего каталога сохраняется в переменной окружения (с именем PWD), и значение этой переменной изменяется при каждом запуске программы cd (а также при смене текущего каталога любым другим способом, например, через Midnight Commander). Аналогичным образом полное имя (с указанием пути) домашнего каталога пользователя, запустившего данный процесс, сохраняется в переменной НОМЕ.

Команда export

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

[user]$ name=value

надо записать

[user]$ export name=value

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


Другие части.

BASH. Часть 1. Введение.
BASH. Часть 2. Специальные символы.
BASH. Часть 3. Выполнение команд.
BASH. Часть 4. Стандартный ввод/вывод.
BASH. Часть 5. Параметры и переменные. Окружение оболочки.
BASH. Часть 6. Раскрытие выражений



Из книги Виктора Костромина "Linux для пользователя".

Ярлыки: , , ,


Коментариев: 2 штук(и)


Дал ссылки на ваши статьи про BASH в своем блоге: http://demonjaka.blogspot.com/2007/08/blog-post_3426.html
Если не трудно, не могли бы сообщить свое имя, просто привык указывать реальные имена в качестве аторов материалов.

На полное авторство данных материалов я конечно не претендую, т.к. они принадлежат перу Виктора Костромина и взяты из его книги "Linux для пользователя", вышедшей в 2006 году. Я только проверил, все, что там написано на работоспособность. А зовут меня Андрей Варзаев.
откоментировал: Anonymous Автор., 21 августа 2007 г., 9:43  


<< На главную... | << Добавить комментарий

BASH. Часть 4. Стандартный ввод/вывод.

четверг, августа 02, 2007

Потоки ввода/вывода


Когда программа запускается на выполнение, в ее распоряжение предоставляются три потока (или канала).

Стандартный ввод (standard input или stdin). По этому каналу данные передаются программе.
Стандартный вывод (standard output или stdout). По этому каналу программа выводит результаты своей работы.
Стандартный поток сообщений об ошибках (standard error или stderr). Поэтому каналу программы выдают информацию об ошибках.

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

Для того чтобы продемонстрировать, как работает стандартный поток ошибок, выполните команду ls с неверным аргументом, например, задав в качестве аргумента имя несуществующего файла. В таком случае ls выведет сообщение об ошибке в стандартный поток ошибок. Для нас, однако, в данном случае стандартный поток ошибок неотличим от выходного потока, поскольку сообщение об ошибке мы видим в окне терминала. Работу со стандартными входным и выходным потоками лучше всего проиллюстрировать на примере команд echo и cat.

Команда echo

Команда echo предназначена для выдачи на стандартный вывод строки символов, которая задана ей в качестве аргумента. После этого она выдает сигнал перевода строки и завершается. Попробуйте выполнить команду

[user]$ echo 'Привет, дружище!'

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

Команда cat

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

Обычно клавиатура настроена на построчный ввод, поэтому если вы нажмете клавишу , последняя набранная строка передается команде cat, которая вновь выводит данные на монитор через стандартный вывод. Таким образом, каждая строка будет показана дважды: один раз при наборе и второй раз — командой cat.

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

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

В следующей статье будет рассмотрено перенаправление ввода/вывода (подробности использования операторов <, >, >>), каналы и фильтры.



Другие части.

BASH. Часть 1. Введение.
BASH. Часть 2. Специальные символы.
BASH. Часть 3. Выполнение команд.
BASH. Часть 4. Стандартный ввод/вывод.
BASH. Часть 5. Параметры и переменные. Окружение оболочки.
BASH. Часть 6. Раскрытие выражений


Из книги Виктора Костромина "Linux для пользователя".

Ярлыки: , , ,


Коментариев: 1 штук(и)


А как VPN под Линухом настроить не подскажешь?


<< На главную... | << Добавить комментарий

BASH. Часть 3. Выполнение команд.

среда, августа 01, 2007

В одной из предыдущих статей я кратко описывал типовые последовательности команд. Начиная с этой статьи все, что там описывалось, будет дано более подробно. Одна из основных функций оболочки состоит в том, чтобы организовать исполнение команд пользователя, вводимых им в командной строке. В частности, оболочка предоставляет пользователю два специальных оператора для организации задания команд в командной строке: ";" и "&".

Оператор ";"

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

[user]$ command1 ; coramand2

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

Оператор &

Оператор "&" используется для того, чтобы организовать исполнение команд в фоновом режиме. Если поставить значок & после команды, то оболочка вернет управление пользователю сразу после запуска команды, не дожидаясь, пока выполнение команды завершится. Например, если задать в командной строке "command1 & command2 &", то оболочка запустит команду command1, сразу же затем команду command2 и затем немедленно вернет управление пользователю.

Операторы "&&" и "||"

Операторы "&&" и "||" являются управляющими операторами. Если в командной строке СТОИТ command1 && command2, TO command2 выполняется В ТОМ И ТОЛЬКО в том случае, если статус выхода из команды command1 равен нулю, что говорит об успешном ее завершении. Аналогично, если командная строка имеет вид command1 || command2, то команда command2 выполняется тогда и только тогда, когда статус выхода из команды command1 отличен от нуля.

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

Итак, первый этап — поиск кода команды. Команды бывают встроенные (те, код которых включен в код самой оболочки) и внешние (код которых расположен в отдельном файле на диске). Встроенную команду оболочка всегда найдет, а для поиска внешней команды пользователь, в принципе, должен указать оболочке полный путь до соответствующего файла. Однако для облегчения жизни пользователей оболочка умеет искать внешние команды в каталогах, которые перечислены в специально заданных "путях поиска". Только если она не находит нужных файлов в таких каталогах, она решает, что пользователь ошибся при вводе имени команды. О том, как оболочка организует передачу данных исполняемой команде и выдачу результатов пользователю будет написано в следующей статье.



Другие части.

BASH. Часть 1. Введение.
BASH. Часть 2. Специальные символы.
BASH. Часть 3. Выполнение команд.
BASH. Часть 4. Стандартный ввод/вывод.
BASH. Часть 5. Параметры и переменные. Окружение оболочки.
BASH. Часть 6. Раскрытие выражений


Из книги Виктора Костромина "Linux для пользователя".

Ярлыки: , , ,


Коментариев: 5 штук(и)


Я уже и комментариев не оставляю - просто молча уношу к себе в Scrapbook в раздел "Золото" :-)
Классные статьи!
откоментировал: Blogger virens, 1 августа 2007 г., 11:31  

Спасибо за оценку моих трудов. :)
откоментировал: Blogger banderlog, 1 августа 2007 г., 11:38  

Пожалуй я тоже себе это сохраню. Для хорошей статьи места не жалко.

Может стоит ссылку на авторство выложить???
примерно вот такую....
http://www.intuit.ru/department/os/baselinuxwork/5/
а то как то.... не красиво...
откоментировал: Anonymous Василий, 20 августа 2007 г., 13:45  

Для Василия: Согласен... Иногда просто из головы вылетает. Вот только INTUIT'ом я не пользуюсь. Имея дома более сотни книг по теме блога, сам понимаешь, лезть, хоть и в уважаемый, INTUIT не имеет смысла. А то, что у них все сходится, то даю ссылку непосредственно на тот источник, откуда взят материал.
откоментировал: Anonymous Автор, 20 августа 2007 г., 14:26  


<< На главную... | << Добавить комментарий