Чтение онлайн

ЖАНРЫ

UNIX — универсальная среда программирования
Шрифт:

$ stty erase е kill k

где

'e'
обозначает нужный вам символ стирания, а
'k'
— символ удаления. Однако задавать эти символы при каждом входе в систему — довольно нудное занятие.

На помощь здесь приходит

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

Большинство пользователей первым делом помещают в свой файл

.profile
команду

$ stty erase <-

Мы

использовали <-, чтобы сделать символ стирания видимым, но вы должны поместить в
.profile
настоящий символ "шаг назад". Команда
stty
воспринимает также обозначение
^x
в качестве
ctl-x
, поэтому тот же результат можно получить, вводя:

$ stty erase '^h'

поскольку ctl-h и есть шаг назад. (Символ

'^'
ранее применялся для операции программного канала
|
, поэтому его следует экранировать с помощью кавычек.) Если на вашем терминале нет возможности задать интервалы табуляции, можно добавить к строке с
stty
аргумент
– tabs
:

stty erase '^h' -tabs

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

who | wc -l

Если имеется служба новостей, можно добавить команду

news
. Те, кому нравится игра
fortune
, могут добавить

/usr/games/fortune

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

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

$
, на самом деле хранится в shell-переменной, называемой
PS1
, и можно присвоить ей любое значение:

PS1='Yes, dear ?'
Да, дорогой?

Кавычки необходимы, поскольку в строке-приглашении есть пробелы, а в этой операции пробелы перед и после

"="
не допускаются.

Интерпретатор также выделяет переменные

НОМЕ
и
MAIL
.
НОМЕ
представляет собой имя вашего начального каталога; переменная обычно имеет правильное значение даже без установки ее в
.profile
. Переменная
MAIL
содержит имя стандартного файла, в котором хранится ваша почта. Если вы переопределите ее для интерпретатора, то будете в случае появления новой почты получать извещение после ввода каждой команды. [4]

4

Эта возможность плохо реализована в

shell
. Просмотр файла после ввода каждой команды сказывается на времени работы системы. Кроме того, если вы достаточно долго работаете в редакторе, то не узнаете о новой почте, поскольку не задаете новых команд в начальном интерпретаторе
shell
. Лучшим решением была бы проверка через каждые несколько минут, а не после очередной команды. В гл. 5 и 7 будет показано, как реализовать такую проверку получения почты. Третьим решением, хотя и не для всех доступным, может быть извещение, посылаемое самой программой
mail
, — она точно "знает", когда появится почта.

MAIL=/usr/spool/mail/you

(В вашей системе файл для почты может быть другим; распространенным является и имя

/usr/mail/you
.)

Наиболее полезной переменной интерпретатора

shell
, вероятно, считается та, которая определяет, где проводится поиск команд. Вспомните, что, когда вы вводите имя команды, интерпретатор обычно вначале ищет его в текущем
каталоге, затем в
/bin
и далее в
/usr/bin
. Эта последовательность каталогов называется путем поиска и хранится в переменной интерпретатора с именем
PATH
. Если определенный по умолчанию путь поиска вас не устраивает, то его можно изменить (опять в файле
.profile
). Например, строкой ниже к стандартному пути поиска добавляется
/usr/games
:

PATH=.:/bin:/usr/bin:/usr/games/
Один способ…

Синтаксис может показаться вам несколько странным: последовательность имен каталогов разделяется двоеточием. Напоминаем, что обозначает текущий каталог. Можно опустить имя

'.'
, пустой компонент в
PATH
обозначает текущий каталог.

Другой способ установить значение

PATH
— просто добавить к предыдущему значению

PATH=$PATH:/usr/games
… Другой способ

Можно получить значение любой переменной интерпретатора, предварив ее имя символом

$
. В приведенном примере выражение
$PATH
выбирает текущее значение, к которому добавляется новый компонент, и результат вновь присваивается
PATH
. Можно проверить это с помощью команды
echo
:

$ echo PATH is $PATH

PATH is :/bin:/usr/bin:/usr/games

$ echo $HOME
Ваш начальный каталог

/usr/you

$

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

PATH
может принять подобное значение:

PATH=:$HOME/bin:/bin:/usr/bin:/usr/games

Вопрос создания своих собственных команд мы обсудим в гл. 3.

Существует еще одна переменная, часто используемая текстовыми редакторами, более популярными, чем

ed
, —
TERM
, которая указывает тип используемого терминала. Эта информация позволяет программам более эффективно работать с экраном. Поэтому можно в
.profile
добавить, например, следующее:

TERM=adm3

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

d=/horribly/long/directory/name

к файлу

.profile
, чтобы использовать:

$ cd $d

Ваши собственные переменные, скажем

d
, по традиции обозначаются строчными буквами, что позволяет отличить их от тех, которые, как
PATH
, использует сам интерпретатор.

Наконец, вы должны сообщить интерпретатору, что будете использовать некоторые переменные в других программах; для этого служит команда

export
, к которой мы вернемся в гл. 3:

export MAIL PATH TERM

Подводя итоги, покажем, как может выглядеть типичный файл

.profile
:

$ cat .profile

stty erase '^h' -tabs

MAIL=/usr/spool/mail/you

PATH=:$HOME:/bin:/usr/bin:/usr/games

TERM=adm3

b=$HOME/book

export MAIL PATH TERM b

date

who | wc -l $

Мы еще далеко не полностью перечислили возможности интерпретатора. В частности, можно создать собственные команды, собрав в файле уже существующие команды, и в данном случае уже будут интерпретироваться команды из этого файла. Удивительно, как многого можно добиться с помощью такого в основе своей простого средства. Мы рассмотрим его в гл. 3.

Поделиться с друзьями: