Книга посвящена дистрибутиву Linux Mint и одной из его главных



Скачать 21.34 Mb.
Pdf просмотр
страница7/30
Дата22.11.2016
Размер21.34 Mb.
Просмотров2666
Скачиваний0
1   2   3   4   5   6   7   8   9   10   ...   30
Автодополнение
Для правильного применения команд, конечно же, нужно знать их имена и назначение. Однако нас никто не заставляет напрягать пальцы вводом имени команды полностью. Потому что тут на помощь приходит великий метод автодополнения.
Благодаря этому методу для любой команды достаточно ввести первые несколько ее символов — и нажать клавишу табуляции (Tab). И, если введённых буковок достаточно для однозначной идентификации, полное имя команды волшебным образом возникнет в строке. Если же наш ввод допускает альтернативы продолжения имени — все они высветятся на экране
(сразу или после повторного нажатия на табулятор, и из них можно будет выбрать подходящую.
Большинство употребимых команд систем — коротки и мнемонически прозрачны. И может показаться. что не такое уж это облегчение — заменить ввод двух-трех символов нажатием табулятора (а то ещё и неоднократным).
Однако, когда речь дойдет до аргументов команд — тут вся мощь автодополнения станет явной.
И ещё маленькое отступление. Автодополнение — стандартная возможность Bash и всех других командных оболочек, относимых к категории развитых. Но как разв стандарте POSIX эта возможность не предусмотрена, и потому POSIX shell ее лишён. Нет этой функции ив системной командной оболочке Mint. Которая, впрочем, в интерактивном режиме не используется.
Ещё один способ облегчения ввода команд — обращение к их истории, о чём разговор будет несколько позже.
Опции
Указания только имени команды достаточно для выполнения некоторых из них. Типичный пример — команда ls (от list), предназначенная для просмотра имен файлов (строго говоря, содержимого каталогов. Данная без аргументов,
она выводит список имен файлов, составляющих текущий каталог,
представленный в некоторой форме по умолчанию, например, в домашнем каталоге пользователя это будет выглядеть примерно так ls
Desktop/ Downloads/ Music/ Pictures/ Templates/
Documents/ lost+found/ mytmp/ Public/ Videos/ Исполнение же многих других команд невозможно без указания опций и
(или) аргументов. Для них в ответ на ввод одного её имени часто следует не сообщение об ошибке (или не только оно, но и краткая справка по использованию команды. Например, в ответ на ввод команды для создания каталогов mkdir (от make directory) последует следующий вывод mkdir [-pv] [-m mode] directory ... Для одних опций достаточно факта присутствия в командой директиве,
другие же требуют указания их значений (даваемых после опции обычно через знак равенства. В приведённом примере команды mkdir к первым относятся опции -v (или --verbose), предписывающая выводит информацию о ходе выполнения команды (запомним эту опцию — в том же смысле она используется чуть лине во всех командах Unix), и -p, которая позволяет создать любую цепочку промежуточных каталогов между текущими новообразуемым (в случае их отсутствия).
А вот опция -m, определяющая атрибуты доступа к создаваемому каталогу,
обязательно требует указания значения — этих самых атрибутов, заданных в символьной форме.
Многие опции имеют две формы — краткую, односимвольную, и полную,
или многосимвольную, Некоторые же опции могут быть даны только в многосимвольной форме. Общее правило здесь таково если одного символа достаточно для однозначного определения опции, могут употребляться обе формы в качестве равноправных. Однако поскольку количество символов латинского алфавита ограниченно (а человеческая фантазия,
конструирующая опции — безгранична, при большом количестве опций одной команды некоторые из них приходится делать исключительно многосимвольными.
Продемонстрирую это на примере опций все той же команды mkdir. Полный их список будет следующим, --mode=MODE установить код доступа
(как вне выдавать ошибок, если существует, создавать родительские каталоги, если необходимо
-v, --verbose печатать сообщение о каждом созданном каталоге
--help показать помощь и выйти
--version вывести информацию о версии и выйти Очевидно, что для опции --version краткая форма совпала бы с таковой для опции --verbose, и потому первая существует только в полной форме. А вот для опции --help краткая форма в большинстве команд возможна, иона выглядит как -h. Более того, во многих командах вызов помощи может быть вызван посредством опции -?. К слову сказать — приведенный выше список опций команды mkdir получен именно таким способом.
Раз уж зашла речь об опциях --version и -h (--help, -?), давайте и их запомним на будущее. Это — так называемые стандартные опции GNU, в число коих входит и опция -v, --verbose. Назначение длинной их формы (--version, --help,
--verbose) идентично почти во всех командах, краткой — во многих.
Опять-таки, из того же примера видно, что опции в односимвольной форме предваряются единичным символом дефиса и могут быть даны единым блоком, без пробелов:

$ mkdir -vpm 777 dir/subdir При этом, естественно, опция, требующая указания значений, ставится последней, и ее значение отделяется пробелом. Опции же в многосимвольной форме требуют предварения удвоенным дефисом, обязательно должны разделяться пробелами и значения их, если таковые требуются,
присваиваются через символ равенства (по научному он называется ещё
оператором присваивания mkdir --parents --mode=777 dir/subdir Загадочные семерки после опции -m (--mode) — это и есть те самые атрибуты доступа, данные в символьной нотации, о которых речь пойдёт в соответствующем разделе.
Опции команды именуются также флагами (реже ключами) или параметрами. Однозначной трактовки этих терминов нет. Однако обычно под флагами подразумеваются опции, не требующие указания значений. Термин параметр же применяется к опции, такового требующей, и объединяет опцию и ее значение. Правда, мне встречалось определение параметра как совокупности опций и аргументов, ноя буду придерживаться приведенных определений.
Порядок опций, если их приводится более одной, для большинства команд несущественен. Хотя, например, для команды tar, создающей файловые архивы, опция -f, значением которой является имя создаваемого или распаковываемого архива, традиционно указывается последней. И, к слову сказать, именно эта команда — одна из немногих, опции которой не обязаны предваряться символами дефиса. Так, директивы tar cf filename.tar dir и tar -cf filename.tar dir абсолютно равноценны и таи другая создает единый архивный файл filename.tar из отдельных файлов каталога Особый смысл имеет символ удвоенного дефиса --, если после него не следует никакой опции таким образом обозначается конец списка опций, и все последующие, отделённые пробелом, символы интерпретируются как аргументы. Одинарный же дефис с последующим пробелом, напротив,
подменяет аргументы команды, то есть в качестве таковых рассматривается стандартный ввод знание этого нам потребуется, когда речь дойдёт до командных конвейеров.
Пример: опции команды ls
Опции определяют условия выполнения команды. На предыдущей странице был приведён пример команды ls без опций. Однако на самом деле отсутствием опций при ней определяется вид выводимого списка по умолчанию — как многоколочночного списка, состоящего из имен файлов без учета т.н. скрытых файлов (а таковыми являются файлы, имена которых начинаются с символа точки, почему они ещё называются файлами, без каких-либо их атрибутов и без визуального различия файлов различных типов.
Различные же опции команды ls определяют состав и формат выводимого списка файлов. Так, в форме ls -a она обеспечивает вывод списка имен всех файлов текущего каталога,
включая скрытые файлы вида .* (символ * здесь обозначает шаблон имени,
соответствующий любому количеству любых символов — в том числе и нулевому, то есть отсутствию оных, символы текущего (./ каталога и каталога родительского (В форме ls -l дается вывод списка имен файлов в длинном формате (отсюда название опции -l — от long), то есть с указанием атрибутов доступа, принадлежности,
времени модификации, размера и некоторых других характеристик. 14 alv alv 4,0K Мар 14 08:40 current/ drwxr-xr-x. 2 alv alv 4,0K Фев 8 11:28 Desktop/ drwx------. 5 alv alv 4,0K Мар 11 18:34 priv/ Форма ls -F позволяет получить список файлов с символьным различением файлов различных типов. Например, имя каталога будет выглядеть как dirname/, имя исполнимого файла — как filename* (здесь звездочка — не шаблон имени, а символическое обозначение исполняемого файла, итак далее.
Я столь подробно остановился на команде ls не только из-за многочисленности ее опций это — одна из самых употребимых команд для просмотра файловой системы. И, должным образом настроенная (в том числе и с помощью приведенных опций, она дает ничуть не менее информативную и зрительно выразительную картину, чем развитые файловые менеджеры типа Midnight Commander или многочисленные файловых менеджеры графического режима.
Аргументы
Таким образом мы подобрались к понятию аргументов командной директивы. Аргументами определяется, как правило, объект (или объекты)
действия команды. В большинстве случаев в качестве аргументов команд выступают имена файлов и (или) пути к ним.
Выше говорилось, что при отсутствии аргументов команда ls выводит список имен файлов текущего каталога. Это значит, что текущий каталог выступает как заданный неявным образом (по умолчанию) аргумент команды ls. Если же требуется вывести список имен файлов каталога, отличного от текущего, путь к нему должен быть указан в качестве аргумента команды
явно, например ls /usr/bin Большинство команд допускает указание не одного, а нескольких (и даже очень многих) аргументов. Так, единой директивой вида cp file1 file2 ... fileN dir можно скопировать (команда cp — от copy) сколько угодно файлов из текущего каталога в каталог dir (на самом делена это сколько угодно»
накладываются некоторые теоретические ограничения, определяемые максимально возможной длиной командной строки, но практически предел этот очень далек).
Маленькое отступление. Упоминание команды cp — удобный случай чуть вернуться назад и рассмотреть одну очень важную опцию, почти универсальную для команд систем. Для начала попробуем скопировать один каталог в другой cp dir1 dir2 Как выдумаете, что получится в результате Правильно, сообщение о невозможности выполнения этой операции — примерно в таком виде omitting directory 'dir1' поскольку команда cp в чистом виде для копирования каталогов не предназначена. Что делать Очень просто — указать опцию -R (отв большинстве систем проходит и опция -r стем же смыслом, но первая форма работает абсолютно везде. В результате в каталог dir2 не только будут скопированы сам каталоги все входящие в него файлы, но и вложенные подкаталоги из dir1, если таковые имеются.
Маленькое уточнение вполне возможно, что в дистрибутиве, который имеется в вашем распоряжении, проходит и копирование каталогов просто через cp, без всяких дополнительных опций. Это — потому, что команда cp часто определяется как псевдоним самой себя с опцией рекурсивного копирования, о чем скоро пойдет речь.
Вообще рекурсия (то есть определение некоего выражения через самого себя) — очень важное понятие в Unix, пронизывающее происходящие от нее системы насквозь. И послужившие даже базой для своеобразного хакерского юмора. Однако сейчас для нас важно только то, что рекурсия применима практически ко всем файловым операциям, позволяя распространить действие одной командной директивы не только на файлы данного каталога,
но и на все вложенные подкаталоги и их содержимое.
Однако вернемся к аргументам. Действие некоторых команд неоднозначно в зависимости от аргументов, к которым она применяется. Например, команда mv служит как для переименования файлов, таки для их перемещёния в другой каталог. Как же она узнает, что ей делать в данном конкретном случае Да именно по аргументам. Если дать ее в форме mv filename1 filename2
то следствием будет переименование filename1 в filename2. А вот если первым аргументом указан файла вторым — каталог, например mv filename dir то результатом будет перемещёние filename из текущего каталога в каталог dir. К слову сказать, команды типа mv воспринимают разное количество аргументов в зависимости оттого, какие они, эти аргументы. В
первом примере аргументов может быть только два — имя исходного файла и имя файла целевого. Зато во втором примере в качестве аргументов можно задать сколько угодно файлов и каталогов (с учетом вышеприведенной оговорки относительно сколько угодно) — все они будут перемещёны в тот каталог, который окажется последним в списке. То есть директивой mv file1 ... fileN dir1 ... dirM dirN в каталог dirN будут перемещёны все файлы file1 ... fileN и все каталоги dir1 ... dirM. Характерно, что для этого команде mv, в отличие от команды ей не требуется каких-либо дополнительных опций — она рекурсивна по самой своей природе.
Пути к файлам
Для правильного построения аргументов команды требуется рассмотрение ещё одного понятия — пути к файлу. Путь — это точное позиционирование файла в файловой системе относительно ее корня (обозначаемого символом прямого слэша — /) или нашего в ней положения — текущего каталога
(который, напомню, символически обозначается единичной точкой — Так, если пользователь находится в своем домашнем каталоге (абсолютный путь к нему обычно выглядит как /home/username), то просмотреть содержимое каталога /usr/bin он может двумя способами — тем, который был дан в предыдущем примере, или вот так ls ../../usr/bin Первый путь в аргументе команды ls — абсолютный, отсчитываемый от корневого каталога, второй — задается относительно каталога текущего,
ведь ../ — это родительский каталог для него.
Пути в аргументах команд могут быть весьма длинными. Например, чтобы просмотреть список шрифтов, применяемых в интерфейсе Cinnamon по умолчанию, нужно дать команду следующего вида ls /usr/share/fonts/truetype/noto И читатель вправе спросить — неужели мне все это вводить вручную?
Отнюдь — отвечу я ему. Потому что автодополнение, о котором упоминалось походу разговора об именах команд, действует также для путей в их аргументах — последовательным нажатием клавиши табуляции все недостающие символы будут добавляться
Ещё один способ избежать набора длинных путей к файлам — это определение переменной PATH. Внимательный читатель, вероятно, обратил внимание, что при наборе команды путь к исполняемому её файлу не указывается. Для внутренних команд причина понятна — они прошиты в
самой оболочке. А как мы обходимся без указания путей к командам внешним Неужели система мистическим чувством определяет, где они находятся?
Отнюдь, ни малейшей мистики, Просто каталоги, в которых находятся команды (а это, как правило, /bin, /sbin, /usr/bin, /usr/sbin) определены в качестве значений переменной PATH, о чём мы подробнее поговорим со временем.
Кое-что об исключениях
Итак, типичная форма команды в обобщенном виде выглядит следующим образом command -[options] [arguments] Из этого правила выбиваются немногочисленные, но весьма полезные и часто используемые команды. Однако и для таких команд с нестандартным синтаксисом устанавливаются те же компоненты — имя, опции, аргументы,
хотя по ряду причин (в том числе исторических) порядок их может меняться.
Это можно проиллюстрировать на примере полезнейшей команды предназначенной для поиска файлов (и не только для этого — она являет собой почти универсальное орудие в деле всякого рода файловых манипуляций. В типичной своей форме она выглядит примерно следующим образом find dir -option1 value -option2 [value] Здесь dir — каталог, в котором выполняется поиск, — может рассматриваться в качестве аргумента команды. Опция -option1 (обратим внимание, что здесь, несмотря на многосимвольность опций, они предваряются единичным символом дефиса) и ее значение value определяют критерий поиска, например, -name filename — поиск файла с указанным именем, а опция -option2 предписывает, что же делать с найденным файлом
(файлами), например, -print — вывести его имя на экран. причём опция действия также может иметь значение. Например, значением опции -exec будет имя команды, вызываемой для обработки найденного файла (файлов).
Так, директива вида find
/ -name *.tar -exec tar xf {} ; требует отыскать в домашнем каталоге (
/), выступающем в качестве аргумента, файлы, имя которых (первая опция — критерий поиска)
соответствует шаблону *.tar (значение первой опции, и выполнить (вторая опция — действия) в их отношении команду tar с собственными опциями,
обеспечивающими распаковку архивов (значение второй опции. Интересно,
что в этом контексте в качестве значений второй опции команды find выступает не только внешняя команда, но и все относящиеся к ней опции.
В последнем примере имеется несколько символов, смысл которых может показаться непонятным. Надеюсь, он прояснится достаточно скоро — в разговоре о регулярных выражениях.

Псевдонимы
Вернемся на минуту к команде ls. У читателя может возникнуть вполне резонный вопроса если я всегда хочу видеть ее вывод с символическим различением типов файлов, да ещё в длинном формате Ну и без вывода скрытых файлов мне никак не прожить. И что же — мне каждый раз вводить кучу опций, чтобы получить столь элементарный эффект?
Отнюдь — ответил бы граф, стуча манжетами о подоконник. Потому что этот вопрос задавали себе многие поколения не только пользователей, но и разработчиков. И ответили на него просто — введением понятия псевдонима команды (Что это такое В большинстве случаев — просто некоторое условное имя,
подменяющее определённую команду с теми её опциями, которые мы используем чаще всего. Причём, что характерно, псевдоним команды может совпадать с ее именем. То есть, например, — набирая просто ls, мы получаем список файлов не в умолчальном формате, а в том, в каком угодно нам.
Устанавливаются псевдонимы очень просто — одноименной командой в качестве аргументов которой выступают имя псевдонима и его значение,
соединенные оператором присваивания (именуемым в просторечии знаком равенства. А именно, если мы хотим ныне, и присно, и вовеки веков видеть вывод команды ls с символьным различением типов файлов, нам достаточно дать команду вроде следующей alias ls='ls -F Здесь следует обратить внимание на два момента а) на то, что имя псевдонима совпадает с именем команды (что отнюдь не препятствует создания псевдонима типа ll='ls -l' специально для вывода файловых списков в длинном формате, и б) на одинарные кавычки, в которые заключено значение псевдонима. Смысл их станет ясен несколькими параграфами позже, а пока просто запомним, что кавычки (и именно одинарные) обязательный атрибут команды установки псевдонима.
Таким образом мы можем наделать себе псевдонимов на все случаи жизни.
В разумных пределах, конечно — иначе вместо упрощения жизни мы создадим себе необходимость запоминания множество невнятных сочетаний символов. Однако на наиболее важных (и обычно определяемых) псевдонимах я остановлюсь.
Вспомним команды типа cp и mv, которыми мы, в частности, можем скопировать или переместить какие-то файлы из каталога в каталог. А что произойдет, если чисто случайно в целевом каталоге уже имеются файлы,
одноименные копируемым/перемещаемым? Произойдет штука, могущая иметь весьма неприятные последствия файлы в целевом каталоге будут заменены новыми, теми, что копируются туда или перемещаются. То есть исходное содержание этих файлов будет утрачено — и безвозвратно,
восстановить его будет невозможно никакими силами.
Разумеется, иногда таки нужно, например, при полном резервном копировании старые версии файлов и должны быть заменены их более свежими вариантами. Однако такое приемлемо далеко не всегда. И потому в большинстве команд, связанных с необратимыми изменениями файловой системы, предусматривается специальная опция — -i (или --interactive). Если
задать эту опцию с командой cp или mv, то при совпадении имён исходного и целевого файлов будет запрошено подтверждение на выполнение соответствующего действия cp file1 file2 cp: overwrite file2'? И пользователь может решить, нужно ли ему затирать существующий файл,
ответив yes (обычно достаточно y), или это нежелательно, и должно ответить no (а также просто n — или не отвечать ничего, это равноценно в данном случае отрицательному ответу).
Так вот, дабы не держать в голове необходимость опции -i (ведь, как я уже говорил, пропуск ее в неподходящий момент может привести к весьма печальным результатам, в подавляющем большинстве систем для команд cp и mv (а также для команды rm, служащей для удаления файлов — эта операция также практически необратима) определяются одноименные им псевдонимы такого вида alias cp='cp -i';
$ alias mv='mv -i';
$ alias rm='rm -i' Все это, конечно, очень благородно, заметит внимательный читатель. Но что, если мне заведомо известно, что сотни, а то и тысячи файлов целевого каталога должны быть именно переписаны новыми своими версиями Что же,
сидеть и, как дурак, жать на клавишу Необязательно. Потому что все команды рассматриваемого класса имеют ещё опцию -f (в длинной своей форме, --force, она также практически универсальна для большинства команд. Которая, отменяя действие опции -предписывает принудительно переписать все файлы целевого каталога их обновленными тезками. И никто не мешает нам на этот случай создать ещё
один псевдоним для команды cp, например alias cpf='cp -f' Правда, предварительно нужно убедиться, что в системе нет уже команды с именем, совпадающим с именем псевдонима — иначе эффект может быть весьма неожиданным (впрочем, это относится ко всем псевдонимам, не совпадающим с именами подменяемых команд).
Есть и другой способ обойти опции, установленные для команды- псевдонима просто отменить псевдоним. Что делается командой обратного значения unalias alias_name То есть дав директиву unalias cp мы вернем команде копирования ее первозданный смысл. Ну а узнать,
какие псевдонимы у нас определены в данный момент, и каковы их значения,
ещё проще команда alias без опций и аргументов выведет полный их список -A' less='less -M' li='ls -ial' ll='ls -l' ls='ls -F --color=auto' итак далее.
Когда я сказано пользовании псевдонимами ныне, и присно, и вовек, — то был не совсем точен. Ныне, то есть в текущем сеансе пользователя — да, они работают. Однако после рестарта системы (или просто после выхода изданного экземпляра командной оболочки) они исчезнут без следа. Чтобы заданные псевдонимы увековечить, их нужно прописать в конфигурационном файле пользовательского шелла. Но этим мы займемся впоследствии. А пока обратимся к переменным.
Переменные
Переменные играют для аргументов команд примерно такую же роль, что и псевдонимы — для команд. То есть избавляют от необходимости мрачного ввода повторяющихся последовательностей символов. Конечно, это — далеко не единственное (а может быть, и не главное) назначение переменных,
однако на данном этапе для нас наиболее существенное.
Что такое переменная Ответ просто — некоторое имя, которому присвоено некоторое значение. Не очень понятно — Согласен. Но, возможно, станет яснее в дальнейшем.
Имена переменных в принципе могут быть любыми, хотя некоторые ограничения также существуют. Я уже вскользь упоминало переменных в разговоре про пути к файлам, где фигурировала переменная PATH. Когда дело дойлёт у нас до пользовательских аккаунтов, придётся поговорить о переменных SHELL, USER, Все эти (и ещё некоторые) имена зарезервированы за внутренними, или встроенными, переменными оболочки (некий минимальный их набор имеется в любом шелле). То есть значения их определены рази навсегда. и пользователем не изменяются. То есть он, конечно, может их изменить, если очень хочет — но ничего доброго, кроме путаницы, из этого не выйдет.
Таких встроенных переменных довольно много. Одна из первых по значению — всё та же переменная PATH. Это — список каталогов, в которых оболочка, в ответ на ввод пользователя в командной строке, ищет исполнимые файлы — то есть просто команды. Я уже обращал внимание, что во всех приведённых выше примерах имена команд указывались без всяких
путей к ним (в отличие от файлов-аргументов, путь к которым — обязателен).
Так вот, успехе поисков и определяется списком значений переменной Каковые могут быть просмотрены командой echo:
$ echo $PATH Обратим внимание на то, что в качества аргумента команды выступает непросто имя переменной, а оно же, но предваренное символом доллара.
Который в данном случае никакого отношения к приглашению командной строки не имеет, а предписывает команде echo подменить имя переменной ее значением (значениями. В большинстве дистрибутивов Linux случае вывод команды для пользователя будет в обязательном порядке включать такие каталоги Для администратора системы сюда обязательно добавятся каталоги /sbin,
/usr/sbin и /usr/local/sbin. Остальные значения переменной PATH могут варьировать по умолчанию, а также задаваться пользователем (как поговорим позже).
Обратим вниммание на одно важное обстоятельство практически во всех дистрибутивах Linux ив более иных ОС в перечне значений переменной PATH отсуствует текущий каталог
Тем временем вернемся к переменной HOME. Значение ее — полный абсолютный путь к домашнему каталогу пользователя. То есть, чтобы перейти в него, пользователю по имени alv вместо cd /home/alv достаточно набрать cd $HOME ион в своих владениях. Может показаться, что экономия — грошовая (тем паче, что перейти в собственный каталог пользователь может просто командой cd без всяких аргументов, но минуту терпения — и выгоду от использования переменных вы увидите.
Кроме переменных, предопределенных в шелле, пользователю предоставляется почти полная свобода в определении переменных собственных. И вот тут-то и наступает ему обещанное облегчение при наборе аргументов команд.
Предположим, что у нас имеется глубоко вложенный подкаталог сданными, постоянно требующимися в работе. Чисто условно примем, что путь к нему — следующий Весьма удручающе для набора, даже если исправно работать табулятором для автодополнения, не так ли Прекрасно, упрощаем себе жизнь определением переменной plate=/home/alv/data/all.my.works/geology/plate-tectonics
Дело в шляпе, Теперь, если нам нужно просмотреть состав этого каталога,
достаточно будет команды ls $plate А вызвать из него любой файл для редактирования можно так joe $plate/filename Подобно псевдонимам, переменные, определенные таким образом (то есть просто в командной строке, имеют силу только в текущем сеансе работы по выходе из оболочки они утрачиваются. Для того, чтобы они действовали перманентно, переменные должны быть прописаны в конфигурационном файле пользовательского шелла. Однако, в отличие от псевдонимов, и этого оказывается не всегда достаточно. Ибо переменная, определенная посредством NAME=Value работает непросто только в текущем сеансе — но ещё и только в конкретном экземпляре шелла. Почему и называется переменной оболочки —
shell variable. Звучит это. быть может, пока не очень понятно. Однако практически любое действие в шелле — запуск команды или программы,
например, — начинается с того, что оболочка, в которой это действие совершается, запускает новый экземпляр самой себя — дочерний шелл, или,
как иногда говорят, субшелл.
Так вот, этот самый субшелл не наследует переменные родительской оболочки. Ив итоге запущенная из командной строки программа ничего не будет знать, например, о путях к исполняемым файлам. Что автоматически ведет к невозможности запуска из нее команд просто по имени, без указания точного пути.
Чтобы избежать такой неприятной ситуации, было придумано понятие переменных окружения, или переменных среды — environment variable. Это те переменные, которые наследуются от родительского шелла всеми дочерними программами. И чтобы сделать их таковыми, переменные следует экспортировать. Как Командой export, которая может быть применена двояким образом. Можно сначала определить переменную NAME=Value а затем применить к ней команду export:
$ export NAME А можно сделать это в один прием export NAME=Value Второй способ применяется, если нужно определить и экспортировать одну переменную. Если же зараз определяется несколько переменных NAME1=Value1;
$ NAME2=Value2;

...;
$ NAMEN=ValueN то проще прибегнуть к первому способу, так как команда export может иметь сколько угодно аргументов export NAME1 NAME2 ... NAMEN Традиционно имена переменных окружения задаются в верхнем регистре,
переменных оболочки — в нижнем.


Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   10   ...   30


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал