Command-line shell (Русский)
Из Википедии:
- Кома́ндная оболо́чка Unix (англ. Unix shell, часто просто «шелл» или «sh») — командный интерпретатор, используемый в операционных системах семейства Unix, в котором пользователь может либо давать команды операционной системе по отдельности, либо запускать скрипты, состоящие из списка команд. В первую очередь, под shell понимаются POSIX-совместимые оболочки, восходящие к Bourne shell (шелл Борна), появившемуся в Unix Version 7.
Список оболочек
Оболочки, более или менее совместимые с POSIX, перечислены в разделе #POSIX-совместимые, а оболочки с другим синтаксисом — в разделе #Альтернативные оболочки.
POSIX-совместимые
На эти оболочки может вести символическая ссылка /usr/bin/sh
. Когда Bash, mkshAUR и zsh запускаются через исполняемый файл с именем sh
, они автоматически становятся более совместимыми с POSIX.
- Bash — Bash расширяет оболочку Bourne shell, добавляя историю и автодополнение, индексированные и ассоциативные массивы, целочисленную арифметику, подстановку процессов, here strings, регулярные выражения и расширение скобок.
- Dash — Потомок NetBSD-версии Almquist SHell (ash). Быстрая POSIX-совместимая оболочка, которая стремится быть настолько маленькой, насколько это возможно.
- Korn shell — Командная оболочка UNIX. Имеет полную обратную совместимость с Bourne shell и включает в себя возможности C shell. Язык KornShell представляет собой полный, мощный язык программирования высокого уровня, для написания приложений. Зачастую легче и быстрее, чем на других языках высокого уровня. Это делает его особенно подходящим для прототипирования. Ksh имеет лучшие черты оболочки Bourne и C, плюс множество самостоятельных возможностей. Таким образом Ksh может сделать многое, чтобы повысить производительность и качество вашей работы в взаимодействии с системой и в программировании. Ksh программы легче писать, они более кратки и читабельны, чем программы написанные на языке нижнего уровня, такого как C.
- http://www.kornshell.com || Смотрите Ksh#Installation
Альтернативные оболочки
- C shell (tcsh) — Командный интерпретатор, используемый как интерактивная оболочка входа в систему и командный процессор скриптов. Он имеет редактор командной строки, программируемое автодополнение слов, проверку орфографии, механизм истории, управление заданиями и C-подобный синтаксис.
- Elvish — Современная и выразительная оболочка, которая может переносить внутренние структурированные значения через конвейеры. Эта возможность позволяет избежать большого количества сложного кода для обработки текста. Это выразительный язык программирования с такими возможностями, как исключения, пространства имён и анонимные функции. Также есть мощный readline, который проверяет синтаксис при наборе текста, и подсветка синтаксиса по умолчанию.
Выбор оболочки по умолчанию
После установки одной оболочки из вышеприведённых, вы можете запустить эту оболочку внутри вашей текущей оболочки, просто запустив его исполняемый файл. Если вы хотите всегда пользоваться только что поставленной оболочкой, для этого нужно изменить настройки оболочки по умолчанию.
Посмотрите все установленные оболочки:
$ chsh -l
И выберите одну из них в качестве оболочки по умолчанию для вашего пользователя:
$ chsh -s полный-путь-до-оболочки
Если вы используете systemd-homed, выполните:
$ homectl update --shell=полный-путь-до-оболочки пользователь
Где полный-путь-до-оболочки — это путь, который вывела команда .
Теперь, если вы выйдите из системы и войдёте снова, вас встретит установленная оболочка.
/etc/shells
. Если свежеустановленная оболочка не появилась в списке, вы можете добавить её вручную в этот файл.Удаление оболочки
Измените оболочку по умолчанию на другую перед её удалением.
В качестве альтернативы измените базу данных пользователей.
Сделайте это для каждого пользователя, у которого удаляемая оболочка используется в качестве оболочки входа (не забудьте проверить пользователя root). После завершения пакет можно удалить.
Оболочка входа
Оболочка входа (login shell) — это режим запуска оболочки, в котором она читает файлы, предназначенные для однократной инициализации, такие как общесистемный или пользовательский или другие специфические для оболочки файлы. Эти файлы задают начальное окружение, которое наследуется всеми другими процессами, запущенными из оболочки (в том числе другими оболочками, не связанными со входом в систему, или графическими приложениями). Следовательно, они читаются только один раз в начале сеанса, то есть, например, когда пользователь входит в консоль или через SSH, меняет пользователя с помощью sudo или su с параметром , или когда пользователь вручную запускает оболочку входа (например, командой ).
Обзор различных файлов инициализации смотрите в разделе #Файлы настроек и по ссылкам в нём. Для получения дополнительной информации об оболочке входа смотрите также Difference between Login Shell and Non-Login Shell? и Why a "login" shell over a "non-login" shell? на Stackexchange.
Файлы настроек
Чтобы сделать автозапуск программ в консоли или при входе в систему, можно использовать файлы/каталоги, которые оболочка выполняет при запуске. Смотрите документацию к вашей оболочке или соответствующую статью в ArchWiki: например, Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы Запуска/Завершения.
/etc/profile
При входе в систему все Bourne-совместимые оболочки выполняют source файла , который, в свою очередь, выполняет source всех читабельных файлов в каталоге : в этих скриптах не требуется указывать директиву интерпретатора (шебанг) и их не нужно делать исполняемыми. Они используются для настройки окружения и определения параметров, специфичных для приложений.
Стандартизация
Можно заставить файлы настроек (некоторых) оболочек следовать одному и тому же соглашению об именовании, а также поддерживать некоторые общие настройки между оболочками.
Смотрите статью об этом и соответствующий репозиторий. Смотрите также xsh.
Ввод и вывод
Смотрите также GregsWiki и I/O Redirection.
- При перенаправлении вывода в файл важно иметь в виду, что файл обнуляется (truncate) перед выполнением команды. Если вы попытаетесь сделать что-то подобное: то это не сработает, а содержимое файла будет потеряно. Хотя в некоторых командах (например sed) есть опция для редактирования файлов на месте, многие команды такой опции не имеют. В таком случае можно использовать команду из пакета moreutils.
- Так как cat не является встроенной в оболочку командой, может быть лучше использовать вместо неё перенаправление, например, в скриптах, или если вам важна производительность. Фактически,
< файл
делает то же самое, что и . - POSIX-совместимые оболочки поддерживают Here Documents:
- Конвейеры (трубы, pipelines) по умолчанию работают со стандартным выводом (stdout). Чтобы работать со стандартным выводом ошибок (), можно перенаправить stderr в stdout с помощью конструкции вида , или, в Bash 4, .
- Помните, что многие основные утилиты GNU принимают файлы в качестве аргументов, так что, например, вместо можно написать .
Смотрите также
- Evolution of shells in Linux on the IBM developerWorks
- terminal.sexy — Конструктор цветовых схем терминала
- Hyperpolyglot — Сравнение синтаксиса разных оболочек
- UNIX Power Tools — General command-line tool usage
- commandlinefu.com — Command-line snippets sharing
- List of applications#Terminal emulators