Командный интерпретатор является основой интерфейса командной строки, первой и главной программой, запускающейся в интерактивном сеансе пользователя. Кроме этого, он широко используется и в пакетном режиме работы, когда команды записываются в файл сценария «пьесы» и «проигрываются по ролям» при его запуске.
В этом случае сценарий является простейшей интерпретируемой программой на языке соответствующего командного интерпретатора.
[На текущий момент времени существует достаточное количество диалектов языка командного интерпретатора: 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-моделеры и инженеры САПР, типографские работники и прочие профессионалы находят свою прелесть в написании и использовании сценариев пакетной обработки своих фотографий, аудио- и видеоматериалов, моделей, чертежей и массы другой информации.
Вручив ежедневную рутину командному интерпретатору, они переходят на следующий уровень развития, где в полную силу посвящают себя решению творческих задач.