Интерпретаторы и их сценарии Linux

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

В этом случае сценарий является простейшей интерпретируемой программой на языке соответствующего командного интерпретатора.

[На текущий момент времени существует достаточное количество диалектов языка командного интерпретатора: POSIX-совместимые ash и dash, авторские диалекты W:[Korn shell] ksh и W:[Bourne shell] bash, диалекты с синтаксисом, подобным «языку программирования Си csh и tcsh и прочие. Ультрасовременные zsh или fish хороши для интерактивной работы в системе, но для пакет-Bpeft обработки команд не имеют особенного смысла.

Кроме языка командного интерпретатора, языки W:[Perl], W:[Python] или W:[Tcl] так [же имеют свои интерпретаторы и практически всегда используются в пакетном режиме обработки своих сценариев.

Для запуска нужного интерпретатора используют универсальный комментарий W:[shebang], записываемый в первую строчку сценария  и указывающий полный путь к программе интерпретатора, которая вызывается для интерпретации запускаемого сценария.

Интерпретаторы и sha-bang

bender@ubuntu: $ file /bin/which

which: POSIX shell script, ASCII text executable

bender@ubuntu: $ head -1 /bin/which

#! /bin/sh

bender@ubuntu:~$ file /bin/gunzip

/bin/gunzip: Bourne-Again shell script, ASCII text executable

bender@ubuntu:~$ head -1 bin/gunzip

#!/bin/bash

bender@ubuntu:~$ file /usr/sbin/iotop

/usr/sbin/iotop: a /usr/bin/python script, ASCII text executable

bender@ubuntu:~$ head -1 /usr/sbin/iotop #!/usr/bin/python

bender@ubuntu:~$ file /usr/bin/lsdev

/usr/bin/lsdev: a /usr/bin/perl script, ASCII text executable

bender@ubuntu:~$ head -1 /usr/bin/lsdev #!/usr/bin/perl

bender@ubuntu:~$ file /usr/bin/netwag

/usr/bin/netwag: a /usr/bin/wish script, ASCII text executable, with CRLF, LF line terminators, with overstriking

bender@ubuntu:~$ head -1 /usr/bin/netwag ‘

#!/usr/bin/wish

Сами сценарии представляют собой обычные текстовые файлы, подготавливаемые в любом текстовом редакторе, однако размещаются в каталогах и имеют права подобно «обычным» исполняемым W:[ELF]-nporpaммaм.

Сценарии интерпретаторов

bender@ubuntu:~$ cat hello.sh

#!/bin/sh

echo «Hello, World!“

bender@ubuntu:~$ hello.sh

hello.sh: команда не найдена

bender@ubuntu:~$ env

PATH=/home/bender/bin: /usr/lib/lightdm/lightdm: /usr/local/sbin: /usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin: /usr/games

bender@ubuntu:~$ pwd

/home/bender

bender@ubuntu:~$ mkdir bin

bender@ubuntu:~$ mv hello.sh /home/bender/bin

bender@ubuntu:~$ hello.sh

bash: /home/bender/bin/hello.sh: Отказано в доступе

bender@ubuntu: ~$ ls -la bin/hello, sh

-rw-rw-r— 1 bender bender 32 янв. 17 15:23 bin/hello.sh

bender@ubuntu:~$ chmod a+x bin/hello.sh

bender@ubuntu:~$ Is -la bin/hello.sh

-rwxrwxr-x 1 bender bender 32 янв, 17 15:23 bin/hello.sh

bender@ubuntu:~$ hello, sh

Hello, World!

Встроенные и внешние команды

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

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

Команда pwd, наоборот, может быть внешней а доказывать при запуске атрибут CWD-своего процесса, унаследованного в момент запуска от командного интерпретатора), но для интерпретаторов Bourne/Korn shell зачастую имеет и встроенную реализацию.

Встроенные и внешние команды

bender@ubuntu:~$ which -a cd

bender@ubuntu:~$ type -a cd

cd встроена в оболочку,

bender@ubuntu:~$ which -a pwd

/bin/pwd

bender@ubuntu:~$ type -a pwd

pwd встроена в оболочку

pwd является /bin/pwd

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

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

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

Основной вид профессиональной деятельности такого пользователя не имеет особого значения. Фотографы и дизайнеры, аудио- и видеоинженеры, ЗD-моделеры и инженеры САПР, типографские работники и прочие профессионалы находят свою прелесть в написании и использовании сценариев пакетной обработки своих фотографий, аудио- и видеоматериалов, моделей, чертежей и массы другой информации.

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

Добавить комментарий