3.7 Shells
In FreeBSD, a lot of everyday work is done in a command line interface called a shell. A shell’s main job is to take commands from the input channel and execute them. A lot of shells also have built in functions to help everyday tasks such as file management, file globbing, command line editing, command macros, and environment variables. FreeBSD comes with a set of shells, such as sh, the Bourne Shell, and tcsh, the improved C-shell. Many other shells are available from the FreeBSD Ports Collection, such as zsh and bash.
Which shell do you use? It is really a matter of taste. If you are a C programmer you might feel more comfortable with a C-like shell such as tcsh. If you have come from Linux or are new to a Unix command line interface you might try bash. The point is that each shell has unique properties that may or may not work with your preferred working environment, and that you have a choice of what shell to use.
One common feature in a shell is filename completion. Given the typing of the first few letters of a command or filename, you can usually have the shell automatically complete the rest of the command or filename by hitting the Tab key on the keyboard. Here is an example. Suppose you have two files called foobar and foo.bar. You want to delete foo.bar. So what you would type on the keyboard is: rm fo[ Tab].[ Tab].
The shell would print out rm foo[BEEP].bar.
The [BEEP] is the console bell, which is the shell telling me it was unable to totally complete the filename because there is more than one match. Both foobar and foo.bar start with fo, but it was able to complete to foo. If you type in ., then hit Tab again, the shell would be able to fill in the rest of the filename for you.
Another feature of the shell is the use of environment variables. Environment variables are a variable key pair stored in the shell’s environment space. This space can be read by any program invoked by the shell, and thus contains a lot of program configuration. Here is a list of common environment variables and what they mean:
Variable | Description |
---|---|
USER | Current logged in user’s name. |
PATH | Colon separated list of directories to search for binaries. |
DISPLAY | Network name of the X11 display to connect to, if available. |
SHELL | The current shell. |
TERM | The name of the user’s terminal. Used to determine the capabilities of the terminal. |
TERMCAP | Database entry of the terminal escape codes to perform various terminal functions. |
OSTYPE | Type of operating system. e.g., FreeBSD. |
MACHTYPE | The CPU architecture that the system is running on. |
EDITOR | The user’s preferred text editor. |
PAGER | The user’s preferred text pager. |
MANPATH | Colon separated list of directories to search for manual pages. |
To set an environment variable differs somewhat from shell to shell. For example, in the C-Style shells such as tcsh and csh, you would use setenv to set environment variables. Under Bourne shells such as sh and bash, you would use export to set your current environment variables. For example, to set or modify the EDITOR environment variable, under csh or tcsh a command like this would set EDITOR to /usr/local/bin/emacs:
Under Bourne shells:
You can also make most shells expand the environment variable by placing a $ character in front of it on the command line. For example, echo $TERM would print out whatever $TERM is set to, because the shell expands $TERM and passes it on to echo.
Shells treat a lot of special characters, called meta-characters as special representations of data. The most common one is the * character, which represents any number of characters in a filename. These special meta-characters can be used to do filename globbing. For example, typing in echo * is almost the same as typing in ls because the shell takes all the files that match * and puts them on the command line for echo to see.
To prevent the shell from interpreting these special characters, they can be escaped from the shell by putting a backslash ( \) character in front of them. echo $TERM prints whatever your terminal is set to. echo \$TERM prints $TERM as is.
3.7.1 Changing Your Shell
The easiest way to change your shell is to use the chsh command. Running chsh will place you into the editor that is in your EDITOR environment variable; if it is not set, you will be placed in vi. Change the «Shell:» line accordingly.
You can also give chsh the -s option; this will set your shell for you, without requiring you to enter an editor. For example, if you wanted to change your shell to bash, the following should do the trick:
Running chsh with no parameters and editing the shell from there would work also.
Note: The shell that you wish to use must be present in the /etc/shells file. If you have installed a shell from the ports collection, then this should have been done for you already. If you installed the shell by hand, you must do this.
For example, if you installed bash by hand and placed it into /usr/local/bin, you would want to:
Prev | Home | Next |
Daemons, Signals, and Killing Processes | Up | Text Editors |
For questions about FreeBSD, read the documentation before contacting .
For questions about this documentation, e-mail .
Shell freebsd что это
При работе с FreeBSD, в большинстве случаях для выполнения повседневных задач используется командный интерфейс (так называемая «оболочка», «shell»). Основная задача интерпретатора — принимать вводимые команды и выполнять их. Многие командные интерпретаторы имеют встроенные средства для выполнения повседневной работы, например, операции над файлами и каталогами, редактирование командной строки, командные макросы и переменные окружения. Вместе с FreeBSD поставляется несколько командных интерпретаторов, например, sh, или Bourne Shell, и tcsh, расширенная версия C-shell. Многие другие интерпретаторы доступны из коллекции портов FreeBSD, например zsh и bash.
Какой из командных интерпретаторов использовать? Это дело вкуса. Если вы программируете на C, то вам, возможно, понравится tcsh. Если вы работали с Linux, или только начинаете работать с интерфейсом командной строки UNIX ®, попробуйте bash. Каждый из названных интерпретаторов имеет свои особенности, которые отличат его от других, и, возможно, повлияют на ваш выбор.
Одна из наиболее часто используемых функций командного интерпретатора — дополнение частичного имени файла до полного. Вы можете набрать только первые несколько символов имени файла, нажать клавишу табуляции (TAB), и командный интерпретатор автоматически завершит имя. Например, у нас есть два файла, названные foobar и foo.bar. Допустим, мы хотим удалить файл foo.bar. Для этого, наберем на клавиатуре rm fo[ Tab].[ Tab].
Вы увидите следующее: rm foo[BEEP].bar.
Здесь [BEEP] — это так называемый консольный сигнал, оповещающий о том, что интерпретатор не в состоянии закончить имя файла, так как по введенным вами символам невозможно однозначно идентифицировать файл. Например, имена файлов foobar и foo.bar оба начинаются с fo , но после нажатия TAB можно однозначно дополнить только до foo . Если же теперь ввести точку ( . ) и вновь нажать TAB, интерпретатор достроит имя файла целиком.
Дополнительные возможности при работе с интерпретатором дает использование переменных окружения. Переменные окружения это пары переменная=значение, хранящиеся в памяти интерпретатора. Значение переменных окружения может быть прочитано любой программой, запущенной из командного интерпретатора, и часто содержит настройки для многих приложений и утилит. Ниже приведены некоторые наиболее часто встречающиеся переменные окружения и их значения:
Переменная | Описание |
---|---|
USER | Имя текущего пользователя. |
PATH | Каталоги, разделенные двоеточием, для поиска исполняемых файлов. |
DISPLAY | Сетевое имя виртуального дисплея X11, доступного для подключения. |
SHELL | Текущий командный интерпретатор. |
TERM | Название (тип) терминала. Используется, чтобы узнать возможности терминала. |
TERMCAP | Список escape-последовательностей для управления различными функциями терминала. |
OSTYPE | Название (тип) операционной системы. Например, FreeBSD. |
MACHTYPE | Архитектура машины (процессора). |
EDITOR | Выбранный пользователем текстовый редактор. |
PAGER | Выбранная пользователем утилита просмотра файлов. |
MANPATH | Каталоги, разделенные двоеточием, для поиска файлов системного справочника. |
Установка значений переменных окружения различна для разных оболочек. Например, в интерпретаторах C-стиля, таких как tcsh и csh, это setenv. В интерпретаторах Bourne, таких как sh и bash, это export. Например, чтобы установить или изменить значение переменной EDITOR к значению /usr/local/bin/emacs в csh или tcsh, выполните команду:
В оболочках Bourne:
Чтобы получить значение переменной, например, в командной строке, поместите символ $ перед именем переменной. Например, команда echo $TERM выведет значение переменной $TERM.
Командный интерпретатор воспринимает некоторые символы, называемые метасимволами, в качестве управляющих. Один из наиболее часто используемых — символ * , который заменяет любое количество символов в имени файла. Метасимволы используются для поиска файлов по маске, например, команда echo * делает практически тоже самое, что и команда ls, поскольку интерпретатор вызывает команду echo, передавая ей имена всех файлов, попадающих под маску * .
В некоторых ситуациях требуется, чтобы интерпретатор воспринимал метасимволы как обычные, не несущие специальной смысловой нагрузки. Этого можно достичь, поставив перед символом обратную косую черту ( \ ). Например, команда echo $TERM выведет тип вашего терминала, в то же время команда echo \$TERM выведет именно слово $TERM , а не значение переменной $TERM.
3.9.1. Как изменить командный интерпретатор по умолчанию
Самым простым способом, пожалуй, будет воспользоваться командой chsh. Если переменная EDITOR определена, то будет загружен соответствующий текстовый редактор, иначе vi. Вам нужно будет изменить значение поля «Shell:» и выйти из редактора с сохранением результатов.
Можно также воспользоваться опцией -s команды chsh. Например, если вы хотите изменить интерпретатор на bash, выполните:
Также можно запустить chsh без параметров и изменить интерпретатор по умолчанию в редакторе.
Замечание: Интерпретатор, который вы будете использовать, обязательно должен быть в файле /etc/shells. Обычно, при установке интерпретаторов из коллекции портов, это делается автоматически. Если же это не так, вам нужно будет самостоятельно добавить соответствующую строчку в этот файл.
Например, если вы установили bash вручную и поместили его в каталог /usr/local/bin, нужно набрать:
Теперь можно смело использовать команду chsh.
Shell freebsd что это
При работе с FreeBSD, в большинстве случаях для выполнения повседневных задач используется командный интерфейс (так называемый «шелл» ), который принимает команды, которые ему подаются, и выполняет их. Многие командные интерпретаторы имеют встроенные средства выполнения наиболее часто используемых команд, например, операции над файлами и каталогами, редактирование командной строки, командные макросы и переменные окружения. Вместе с FreeBSD поставляется несколько командных интерпретаторов, например, sh, или Bourne Shell, и csh, иначе C-shell. Многие другие, более мощные, например, tcsh или bash, доступны в коллекции портов.
Какой из командных интерпретаторов использовать? Это дело вкуса. Если Вы программируете на C, то Вам, возможно, понравится tcsh, а если Вы работали с Linux, то Вас скорее устроит bash, нежели что-либо другое. Каждый из названных интерпретаторов имеет свои особенные свойства, которые отличат его от других и, возможно, повлияют на Ваш выбор.
Одна из наиболее часто используемых функций командного интерпретатора — дополнение частичного имени файла до полного. Вы можете набрать только первые несколько символов имени файла, нажать клавишу табуляции (TAB), и командный интерпретатор автоматически Например, у нас есть два фала, названные foobar и foo.bar . Допустим, мы хотим удалить файл foo.bar . Для этого, наберем на клавиатуре rm fo[TAB].[TAB] .
Вы увидите следующее: rm foo[BEEP].bar .
Здесь [BEEP] — это так называемый консольный звонок, сигнализирующий о том, что интерпретатор не в состоянии закончить имя файла, так как по введенным Вами символам невозможно однозначно идентифицировать файл. Например, имена файлов foobar и foo.bar оба начинаются с fo , но после нажатия TAB можно однозначно дополнить только до foo . Если же теперь ввести точку ( . ) и вновь нажать TAB, интерпретатор достроит имя файла целиком.
При работе с любым командным интерпретатором, Вы столкнетесь с переменными окружения. Под переменной окружения понимается некоторая строка символов, идентифицируемая некоторым именем. Значение переменных окружения может быть прочитано любо программой, запущенной из командного интерпретатора, и часто содержит конфигурационные настройки для многих приложений и утилит. Ниже приведены некоторые наиболее часто встречающиеся переменные окружения с объяснением их значения:
Переменная | Описание |
---|---|
USER | Имя текущего пользователя. |
PATH | Каталоги, разделенные двоеточием, в которых производить поиск исполняемых файлов. |
DISPLAY | Сетевое имя виртуального дисплея X11, если доступен для подключения. |
SHELL | Текущий командный интерпретатор. |
TERM | Название (тип) терминала. Используется, чтобы узнать возможности терминала. |
TERMCAP | Список escape-последовательностей для управления различными функциями терминала. |
OSTYPE | Название (тип) операционной системы. Например, FreeBSD. |
MACHTYPE | Архитектура машины (процессора). |
EDITOR | Предпочитаемый пользователем текстовый редактор. |
PAGER | Предпочитаемая пользователем утилита просмотра файлов. |
MANPATH | Каталоги, разделенные двоеточием, в которых производить поиск файлов системного справочника. |
В зависимости от используемого командного интерпретатора, для просмотра и установки значений переменных окружения служат различные команды. Например, в интерпретаторах csh и tcsh это setenv . В sh и bash это set и export . В частности, чтобы установить или изменить значение переменной EDITOR (в csh или tcsh) равное /usr/local/bin/emacs , выполните команду:
setenv EDITOR /usr/local/bin/emacs
Если Вы используете bash:
Чтобы получить значение переменной, например, в командной строке, поместите символ доллара ( $ ) перед именем переменной. Например, команда echo $TERM выведет значение переменной $TERM .
Командный интерпретатор воспринимает некоторые символы, называемые метасимволами, в качестве управляющих, несущих специальные функции. Одни из наиболее часто используемых — символ * , который заменяет любое количество символов в имени файла, и ? , заменяющий один символ. Эти метасимволы используются для поиска файлов по маске, например, команда echo * выполняет практически тоже самое, что и команда ls , так как под маску * попадают все файлы из текущего каталога (на самом деле, это всегда так и зависит от командного интерпретатора, например, в bash под маску * не попадут файлы, начинающиеся с точки . — скрытые файлы).
В некоторых ситуациях требуется, чтобы интерпретатор воспринимал метасимволы как обычные, не несущие специальной смысловой нагрузки. Этого можно достичь, поставив перед символом обратную косую черту ( \ ). Например, команда echo $TERM выведет тип Вашего терминала, в то же время команда echo \$TERM выведет именно слово $TERM , а не значение переменной $TERM .
Самым простым, пожалуй, будет воспользоваться командой chsh . Если переменная EDITOR определена, то будет загружен текстовый редактор $EDITOR , иначе vi. Вам нужно будет изменить значение поля «Shell:» и выйти из редактора с сохранением результатов.
Можно также воспользоваться опцией -s команды chsh . Например:
% chsh -s /usr/local/bin/bash
Note: Помните, чтобы использовать некоторую программу в качестве командного интерпретатора, она должна быть обязательно упомянута в файле /etc/shells . Обычно, при установке интерпретаторов из дерева портов, это делается автоматически. Если же это не так, Вам нужно будет самим добавить соответствующую строчку в этот файл.
Например, допустим, что Вы установили bash вручную, без использования соответствующего порта, и поместили его в каталог /usr/local/bin . В таком случае, можно набрать:
# echo «/usr/local/bin/bash» >> /etc/shells
Теперь можно смело использовать команду chsh .