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

на главную

Жанры

Внутреннее устройство Linux
Шрифт:

Применение команды expr — это неуклюжий и медленный способ выполнения математических вычислений. Если вам часто приходится заниматься ими, то, вероятно, лучше использовать что-либо вроде языка Python вместо сценария оболочки.

11.10.6. Команда exec

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

ее необратимости: если запустить команду exec в сценарии оболочки, то этот сценарий и сама оболочка прекратят работу, уступив место новой команде.

Чтобы проверить это в окне оболочки, попробуйте запустить команду exec cat. После нажатия сочетания клавиш Ctrl+D или Ctrl+C для завершения команды cat окно оболочки должно исчезнуть, поскольку его дочерний процесс больше не существует.

11.11. Подоболочки

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

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

$ (cd uglydir; uglyprogram)

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

$ (PATH=/usr/confusing:$PATH; uglyprogram)

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

$ PATH=/usr/confusing:$PATH uglyprogram

Каналы и фоновые процессы также работают в подоболочках. Следующий пример использует команду tar для архивирования всего дерева каталогов внутри каталога orig, а затем распаковывает этот архив в новый каталог target, дублируя тем самым файлы и папки каталога orig (это оправданно, поскольку при этом сохраняются сведения о владельцах и правах доступа, и это обычно выполняется быстрее, чем команда типа cp -r):

$ tar cf–orig | (cd target; tar xvf -)

внимание

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

11.12. Включение других файлов в сценарии

Если вам необходимо включить другой файл в сценарий оболочки, используйте оператор «точка» (.). Например, такая строка выполняет команды из файла config.sh:

. config.sh

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

11.13. Чтение пользовательского ввода

Команда read считывает строку текста из стандартного ввода и сохраняет ее текст в переменной. Например, следующая команда сохраняет ввод в переменной $var:

$ read var

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

11.14. Когда (не) использовать сценарии оболочки

Оболочка настолько богата функциями, что трудно рассказать обо всех ее важнейших элементах в одной главе. Если вы заинтересовались, на что еще способна оболочка, загляните в одну из книг, посвященных программированию в оболочке (например, Unix Shell Programming («Программирование в оболочке Unix») Стефена Дж. Коучена (Stephen G. Kochan) (3-е издание, SAMS Publishing, 2003)) или рассказывающих о сценариях оболочки (The UNIX Programming Environment («Среда программирования Unix») Брэна У. Кернигана (Bran W. Kernighan) и Роба Пайка (Rob Pike) (Prentice Hall, 1984)).

Но, несмотря на это, в некоторый момент (особенно если вы начинаете пользоваться встроенной командой read), вы должны задать себе вопрос: применяете ли вы по-прежнему верный инструмент для работы? Вспомните, с чем лучше всего справляются сценарии оболочки: это работа с простыми файлами и командами. Как уже было сказано выше, если вам приходится писать что-либо замысловатое, а в особенности задействовать сложные строковые или арифметические операции, вероятно, лучше обратиться к таким языкам сценариев, как Python, Perl или awk.

12. Передача файлов по сети

В этой главе рассмотрены возможности передачи и совместного использования файлов компьютерами одной сети. Мы начнем со способов копирования, которые отличаются от утилит scp и sftp, уже известных вам. Затем мы кратко рассмотрим подлинное совместное применение файлов, при котором какой-либо каталог компьютера включается в число каталогов другого компьютера.

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

12.1. Быстрое копирование

Допустим, вы желаете скопировать файл (или файлы) с вашего компьютера на другой компьютер вашей сети и при этом вам не обязательно возвращать его обратно или предпринимать какие-либо особые действия. Вы просто хотите выполнить это бы­стро. Существует удобный способ осуществить желаемое с помощью модуля Python. Просто перейдите в каталог с необходимыми файлами и запустите такую команду:

$ python -m SimpleHTTPServer

Поделиться:
Популярные книги

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Не кровный Брат

Безрукова Елена
Любовные романы:
эро литература
6.83
рейтинг книги
Не кровный Брат

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши

Последний попаданец 5

Зубов Константин
5. Последний попаданец
Фантастика:
юмористическая фантастика
рпг
5.00
рейтинг книги
Последний попаданец 5

Заставь меня остановиться 2

Юнина Наталья
2. Заставь меня остановиться
Любовные романы:
современные любовные романы
6.29
рейтинг книги
Заставь меня остановиться 2

Курсант: Назад в СССР 7

Дамиров Рафаэль
7. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 7

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3