3

Когда я открываю окно терминала в Mac OS X, я могу набрать bash и нажать Enter, и я увижу:

Last login: Fri Feb 20 14:30:56 on ttys000
Korays-MacBook-Pro:~ koraytugay$ bash
bash-3.2$ 

Я могу, например, запустить такие команды, как ls или ls -l как в терминале, так и в "bash-3.2 $"

Что такое bash под терминалом и что такое сам терминал?

3 ответа3

7

Терминал когда-то буквально означал поле, в которое вы ввели, удаленно подключенное к мэйнфрейму.

Фактически, ваш современный «терминал», возможно, эмулирует один из этих

Современные «терминалы» - это эмуляторы терминалов, которые ведут себя примерно так же, как и стандартные терминалы. Итак, вы используете xterm, rxvt или что-то еще. Терминал предоставляет механизм для ввода команд.

Вы запускаете командный процессор или оболочку, помимо этого - bash, fish, csh или другие. Это то, что на самом деле превращает текст, который вводится в терминал, в инструкции, на которых действует компьютер. Большинство оболочек допускают создание сценариев, и вы увидите совершенно другой синтаксис, скажем, bash или csh. Они будут работать одинаково на разных терминалах.

3

Bash - одна из популярных оболочек командной строки, программ, основной задачей которых является запуск других программ (в дополнение к некоторым вспомогательным функциям).
Часть командной строки означает, что вы управляете ею, набирая команды по одной строке за раз.
Собственно говоря, графический интерфейс, который вы используете для запуска программ двойным щелчком по значку, также является оболочкой, но на практике под "оболочкой" люди обычно подразумевают командную строку.

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

Теперь Terminal - это программа, которая обеспечивает графический интерфейс между оболочкой и пользователем. Он получает от оболочки, например, символы "команда не найдена", и выясняет, как их отобразить - каким шрифтом, где на экране, каким цветом, должна ли быть полоса прокрутки. Когда вы нажимаете некоторые клавиши, он выясняет, следует ли отправлять их в оболочку в виде символов (например, ls -l), или интерпретировать их самостоятельно (например, ⌘C).

Когда вы открываете приложение Terminal, оно автоматически открывает оболочку для подключения к вам. В его настройках вы можете выбрать другую оболочку из Bash. Если вы чувствуете себя дерзким, вы можете даже заставить его использовать программу, которая вовсе не является оболочкой - не слишком полезной, но она демонстрирует, как Терминал заботится только о передаче символов внутрь, а не о том, что оболочка делает с ними ,

Что происходит, когда вы вводите bash в Bash (через терминал)? Запускает программу Bash - то есть еще одну копию себя внутри себя.

ETA: подсказка, которую Bash дает вам перед тем, как вы наберете каждую команду, является удобной для настройки и контролируется (в специальном формате) переменной PS1 . Попробуйте ввести echo $PS1 в родительском и дочернем экземплярах Bash.

При запуске из приложения «Терминал» эта переменная задает запрос на ввод имени компьютера, каталога и пользователя. Это настроено для вас в /etc/bashrc , но вы можете установить новое значение, в идеале в ~/.bash_profile . NB. это в некоторой степени зависит от OSX; в большинстве других систем вы бы предпочли ~/.bashrc для этого.

Когда вы просто запускаете дочерний экземпляр Bash, /etc/bashrc не выполняется повторно, поэтому эта переменная не устанавливается. Он также не настроен для наследования дочерними оболочками (что совершенно необходимо для переменных среды), поэтому Bash возвращается к бесполезному стандартному значению - просто показывает, какая версия запущена.

1

см. также https://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on.

Вы можете попробовать echo $0 или echo $SHELL чтобы узнать, какая оболочка работает в вашем окне эмулятора терминала.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .