В чем различие bash и терминала

от admin

В чем разница между терминалом и bash?

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

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

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

3 ответа 3

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

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

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

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

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 возвращается к бесполезному стандартному значению — просто показывает, какая версия запущена.

Разница между оболочкой Bash и терминалом Bash?

Хорошо, я надеюсь, что этот вопрос имеет смысл, но в чем разница между оболочкой bash и терминалом bash? Пример. Когда я впервые открываю терминал, у меня появляется подсказка с моим текущим каталогом и моим именем пользователя. В заголовке окна терминала написано -bash-, когда я набираю echo $ SHELL, я получаю bash. Итак, по умолчанию оболочка — bash. Моя путаница проявляется в том, что я набираю bash. Затем мое приглашение переходит к bash-3.2 $. Очевидно, это другой режим. Есть ли какие-нибудь существенные различия? Я прочитал справочную страницу без ответа. Я понимаю, что такое оболочка bash, но просто не понимаю разницы. Заранее благодарим за ясность.

Как отличаются среды стандартной командной строки терминала и сценария bash?

Нам стало полезно получить немного более простой и точный ответ на вопрос «когда мы последний раз залапили эту вещь?». Поэтому я поставил это вместе. Я тестировал его 12.04 и 14.04 и 16.04. Он возвращает достаточно точные ответы на этот вопрос. Примечание: «разумно точный», вероятно, не является «полностью точным». Примечание: «только для этого вопроса».

подпрограммы и программа:

20 ответов

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Это показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и сценарием, то, скорее всего, сценарий использует другой интерпретатор (разные версии bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt). Последнее различие может быть результатом вашего интерактивного поиска оболочки $HOME/.bashrc и $HOME/.profile, тогда как сценариев, как правило, нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но это должно влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

Ваш вопрос нельзя ответить в целом. Хотя некоторые комментарии. По моей версии баш (3.1.17(1)-релиз), ваша команда не имеет желаемого результата даже при запуске из командной строки; то же с ЗШ. Так что, видимо, что-то подозрительное в вашу команду. Я не знаю, что «##+(0)» будет готов выполнить, но «#0» не удастся вытащить один ведущий ноль. Это показывают способ, чтобы удалить произвольное количество нулей.

если там действительно есть разница между поведением в командной строке и из скрипта, то, скорее всего, скрипт использует другой переводчик (различные версии оболочки bash, баш вместо ЗШ) или другую оболочку варианты (попробуйте запустить shopt). Последнее различие может быть результатом интерактивной оболочке источников [F2] и $HOME/.profile, тогда как сценарии, как правило, не. Это не должно влиять на переменные окружения, так как они по наследству, если на экспорт, но это должно повлиять на параметры оболочки, которые должны быть установлены в каждом патроне.

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Это показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и сценарием, то, скорее всего, сценарий использует другой интерпретатор (разные версии bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt). Последнее различие может быть результатом вашего интерактивного поиска оболочки $HOME/.bashrc и $HOME/.profile, тогда как сценариев, как правило, нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но это должно влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Это показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и сценарием, то, скорее всего, сценарий использует другой интерпретатор (разные версии bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt). Последнее различие может быть результатом вашего интерактивного поиска оболочки $HOME/.bashrc и $HOME/.profile, тогда как сценариев, как правило, нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но это должно влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

Ваш вопрос нельзя ответить в целом. Хотя некоторые комментарии. По моей версии баш (3.1.17(1)-релиз), ваша команда не имеет желаемого результата даже при запуске из командной строки; то же с ЗШ. Так что, видимо, что-то подозрительное в вашу команду. Я не знаю, что «##+(0)» будет готов выполнить, но «#0» не удастся вытащить один ведущий ноль. Это показывают способ, чтобы удалить произвольное количество нулей.

если там действительно есть разница между поведением в командной строке и из скрипта, то, скорее всего, скрипт использует другой переводчик (различные версии оболочки bash, баш вместо ЗШ) или другую оболочку варианты (попробуйте запустить shopt). Последнее различие может быть результатом интерактивной оболочке источников [F2] и $HOME/.profile, тогда как сценарии, как правило, не. Это не должно влиять на переменные окружения, так как они по наследству, если на экспорт, но это должно повлиять на параметры оболочки, которые должны быть установлены в каждом патроне.

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Этот показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и скриптом, то, скорее всего, сценарий использует другой интерпретатор (другая версия bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt ). Последнее различие может быть результатом вашего интерактивного shell sourcing $ HOME / .bashrc и $ HOME / .profile , тогда как сценариев обычно нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но они должны влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Этот показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и скриптом, то, скорее всего, сценарий использует другой интерпретатор (другая версия bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt ). Последнее различие может быть результатом вашего интерактивного shell sourcing $ HOME / .bashrc и $ HOME / .profile , тогда как сценариев обычно нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но они должны влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Этот показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и скриптом, то, скорее всего, сценарий использует другой интерпретатор (другая версия bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt ). Последнее различие может быть результатом вашего интерактивного shell sourcing $ HOME / .bashrc и $ HOME / .profile , тогда как сценариев обычно нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но они должны влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Этот показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и скриптом, то, скорее всего, сценарий использует другой интерпретатор (другая версия bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt ). Последнее различие может быть результатом вашего интерактивного shell sourcing $ HOME / .bashrc и $ HOME / .profile , тогда как сценариев обычно нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но они должны влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

На ваш вопрос нельзя ответить в целом. Однако некоторые комментарии. В моей версии bash (3.1.17 (1) -release) ваша команда не имеет нужного выхода даже при запуске из командной строки; то же самое с zsh. Так что, по-видимому, что-то подозрительно в вашей команде. Я не знаю, для чего поддерживается «## + (0)», но «# 0» удаляет один ведущий ноль. Этот показывает способ удаления произвольных чисел нулей.

Если действительно существует разница между поведением в командной строке и скриптом, то, скорее всего, сценарий использует другой интерпретатор (другая версия bash, bash вместо zsh) или разные параметры оболочки (попробуйте запустить shopt ). Последнее различие может быть результатом вашего интерактивного shell sourcing $ HOME / .bashrc и $ HOME / .profile , тогда как сценариев обычно нет. Это не должно влиять на переменные среды, поскольку они наследуются при экспорте, но они должны влиять на параметры оболочки, которые необходимо установить в каждой оболочке.

Читать:
Как получить рут права через termux

Предполагая, что вы используете одну и ту же оболочку в своем сценарии и в своем терминале, основное отличие состоит в том, что

/.bashrc читается интерактивными оболочками, но не с помощью интерпретаторов сценариев. Причина в том, что сценарии обычно имеют несколько портативный характер, и для этого вы не хотите зависеть от настроек оболочки пользователя.

Многие вещи в типичных файлах .bashrc применяются только к командной строке (подсказки, привязки клавиш). Некоторые, как определения функций, имеют смысл и в сценариях; обычно вы помещаете их в отдельный файл и отправляете его как из

/.bashrc, так и с помощью скриптов. Иногда вам нужны некоторые варианты оболочки для интерактивного использования, но не в сценариях, потому что они приводят к более короткому (хорошему в командной строке), но более загадочному или менее портативному (плохому в скриптах) коду. Есть несколько вещей, которые bash делает по-другому, например. расширение истории (!! и т. д.) включено по умолчанию только в интерактивных оболочках.

Здесь вы используете конструкцию +(…), которая является расширенным шаблоном клонирования ksh. Bash не включает их по умолчанию (для обратной совместимости), но вы можете включить их с помощью shopt -s extglob. Очевидно, вы имеете это в своем

Вы можете поместить shopt -s extglob в свой скрипт или использовать переносимый способ усечения ведущего 0 s из переменной, такой как

Предполагая, что вы используете одну и ту же оболочку в своем сценарии и в своем терминале, основное отличие состоит в том, что

/.bashrc читается интерактивными оболочками, но не с помощью интерпретаторов сценариев. Причина в том, что сценарии обычно имеют несколько портативный характер, и для этого вы не хотите зависеть от настроек оболочки пользователя.

Многие вещи в типичных файлах .bashrc применяются только к командной строке (подсказки, привязки клавиш). Некоторые, как определения функций, имеют смысл и в сценариях; обычно вы помещаете их в отдельный файл и отправляете его как из

/.bashrc, так и с помощью скриптов. Иногда вам нужны некоторые варианты оболочки для интерактивного использования, но не в сценариях, потому что они приводят к более короткому (хорошему в командной строке), но более загадочному или менее портативному (плохому в скриптах) коду. Есть несколько вещей, которые bash делает по-другому, например. расширение истории (!! и т. д.) включено по умолчанию только в интерактивных оболочках.

Здесь вы используете конструкцию +(…), которая является расширенным шаблоном клонирования ksh. Bash не включает их по умолчанию (для обратной совместимости), но вы можете включить их с помощью shopt -s extglob. Очевидно, вы имеете это в своем

Вы можете поместить shopt -s extglob в свой скрипт или использовать переносимый способ усечения ведущего 0 s из переменной, такой как

предполагаю, что вы используете тот же Шелл в скрипте и в вашем терминале, основное различие заключается в том, что

/.bashrc читается интерактивную оболочку, а не скрипт-перевод снарядов. Причина в том, что скрипты обычно предназначены, чтобы быть переносимой, и за то, что Вы не хотите зависеть от настроек пользователя.

многие вещи в типичном .bashrc файлы применяются только к командной строке равно (настройки подсказки, горячие клавиши). Некоторые, такие как определения функций, смысла в сценарии, а также, как правило, вы бы поместить их в отдельный файл и источник его от [F4], а скрипты. Иногда вы хотите, чтобы некоторые варианты оболочка для интерактивного использования, но не в сценарии, потому что они приводят к более коротким (хорош в командной строке), но более загадочным или менее портативный (плохо в скриптах) код. Есть несколько вещей, которые громят, — совсем по-другому, например, расширение история (. и т. д.). по умолчанию включена только в интерактивную оболочку.

здесь вы используете +(…) конструкт, который представляет собой КШ расширенные подстановка шаблона. Bash не включить их по умолчанию (для обратной совместимости), но вы можете включить их с shopt -s extglob. Видимо у вас это в вашей

Вы можете положить [F9] в ваш скрипт, или использовать портативный способ усечения ведущих [F10]для S от переменных, таких как

предполагаю, что вы используете тот же Шелл в скрипте и в вашем терминале, основное различие заключается в том, что

/.bashrc читается интерактивную оболочку, а не скрипт-перевод снарядов. Причина в том, что скрипты обычно предназначены, чтобы быть переносимой, и за то, что Вы не хотите зависеть от настроек пользователя.

многие вещи в типичном .bashrc файлы применяются только к командной строке равно (настройки подсказки, горячие клавиши). Некоторые, такие как определения функций, смысла в сценарии, а также, как правило, вы бы поместить их в отдельный файл и источник его от [F4], а скрипты. Иногда вы хотите, чтобы некоторые варианты оболочка для интерактивного использования, но не в сценарии, потому что они приводят к более коротким (хорош в командной строке), но более загадочным или менее портативный (плохо в скриптах) код. Есть несколько вещей, которые громят, — совсем по-другому, например, расширение история (. и т. д.). по умолчанию включена только в интерактивную оболочку.

здесь вы используете +(…) конструкт, который представляет собой КШ расширенные подстановка шаблона. Bash не включить их по умолчанию (для обратной совместимости), но вы можете включить их с shopt -s extglob. Видимо у вас это в вашей

Вы можете положить [F9] в ваш скрипт, или использовать портативный способ усечения ведущих [F10]для S от переменных, таких как

предполагаю, что вы используете тот же Шелл в скрипте и в вашем терминале, основное различие заключается в том, что

/.bashrc читается интерактивную оболочку, а не скрипт-перевод снарядов. Причина в том, что скрипты обычно предназначены, чтобы быть переносимой, и за то, что Вы не хотите зависеть от настроек пользователя.

многие вещи в типичном .bashrc файлы применяются только к командной строке равно (настройки подсказки, горячие клавиши). Некоторые, такие как определения функций, смысла в сценарии, а также, как правило, вы бы поместить их в отдельный файл и источник его от [F4], а скрипты. Иногда вы хотите, чтобы некоторые варианты оболочка для интерактивного использования, но не в сценарии, потому что они приводят к более коротким (хорош в командной строке), но более загадочным или менее портативный (плохо в скриптах) код. Есть несколько вещей, которые громят, — совсем по-другому, например, расширение история (. и т. д.). по умолчанию включена только в интерактивную оболочку.

здесь вы используете +(…) конструкт, который представляет собой КШ расширенные подстановка шаблона. Bash не включить их по умолчанию (для обратной совместимости), но вы можете включить их с shopt -s extglob. Видимо у вас это в вашей

Вы можете положить [F9] в ваш скрипт, или использовать портативный способ усечения ведущих [F10]для S от переменных, таких как

Предполагая, что вы используете ту же оболочку в своем сценарии и в своем терминале, основное отличие состоит в том, что

/ .bashrc читается интерактивными оболочками, но не интерпретируется скриптами. Причина в том, что скрипты обычно имеют несколько портативный характер, и для этого вы не хотите зависеть от настроек оболочки пользователя.

Многие вещи в типичных файлах .bashrc все равно применяются только к командной строке (параметры подсказки, привязки клавиш). Некоторые, как определения функций, имеют смысл и в сценариях; как правило, вы помещаете их в отдельный файл и отправляете его как из

/ .bashrc , так и с помощью скриптов. Иногда вам нужны некоторые варианты оболочки для интерактивного использования, но не в сценариях, потому что они приводят к более короткому (хорошему в командной строке), но более загадочному или менее портативному (плохому в скриптах) коду. Есть несколько вещей, которые bash делает по-другому, например. расширение истории ( !! и т. д.) включено по умолчанию только в интерактивных оболочках.

Здесь вы используете конструкцию + (. ) , который является расширенным шаблоном клонирования ksh. Bash не включает их по умолчанию (для обратной совместимости), но вы можете включить их с помощью shopt -s extglob . По-видимому, это у вас в

Вы можете поместить shopt -s extglob в свой скрипт или использовать переносимый способ усечения 0 s от переменной, такой как

Предполагая, что вы используете ту же оболочку в своем сценарии и в своем терминале, основное отличие состоит в том, что

/ .bashrc читается интерактивными оболочками, но не интерпретируется скриптами. Причина в том, что скрипты обычно имеют несколько портативный характер, и для этого вы не хотите зависеть от настроек оболочки пользователя.

Многие вещи в типичных файлах .bashrc все равно применяются только к командной строке (параметры подсказки, привязки клавиш). Некоторые, как определения функций, имеют смысл и в сценариях; как правило, вы помещаете их в отдельный файл и отправляете его как из

/ .bashrc , так и с помощью скриптов. Иногда вам нужны некоторые варианты оболочки для интерактивного использования, но не в сценариях, потому что они приводят к более короткому (хорошему в командной строке), но более загадочному или менее портативному (плохому в скриптах) коду. Есть несколько вещей, которые bash делает по-другому, например. расширение истории ( !! и т. д.) включено по умолчанию только в интерактивных оболочках.

Здесь вы используете конструкцию + (. ) , который является расширенным шаблоном клонирования ksh. Bash не включает их по умолчанию (для обратной совместимости), но вы можете включить их с помощью shopt -s extglob . По-видимому, это у вас в

Вы можете поместить shopt -s extglob в свой скрипт или использовать переносимый способ усечения 0 s от переменной, такой как

Предполагая, что вы используете ту же оболочку в своем сценарии и в своем терминале, основное отличие состоит в том, что

/ .bashrc читается интерактивными оболочками, но не интерпретируется скриптами. Причина в том, что скрипты обычно имеют несколько портативный характер, и для этого вы не хотите зависеть от настроек оболочки пользователя.

Многие вещи в типичных файлах .bashrc все равно применяются только к командной строке (параметры подсказки, привязки клавиш). Некоторые, как определения функций, имеют смысл и в сценариях; как правило, вы помещаете их в отдельный файл и отправляете его как из

/ .bashrc , так и с помощью скриптов. Иногда вам нужны некоторые варианты оболочки для интерактивного использования, но не в сценариях, потому что они приводят к более короткому (хорошему в командной строке), но более загадочному или менее портативному (плохому в скриптах) коду. Есть несколько вещей, которые bash делает по-другому, например. расширение истории ( !! и т. д.) включено по умолчанию только в интерактивных оболочках.

Здесь вы используете конструкцию + (. ) , который является расширенным шаблоном клонирования ksh. Bash не включает их по умолчанию (для обратной совместимости), но вы можете включить их с помощью shopt -s extglob . По-видимому, это у вас в

Вы можете поместить shopt -s extglob в свой скрипт или использовать переносимый способ усечения 0 s от переменной, такой как

Предполагая, что вы используете ту же оболочку в своем сценарии и в своем терминале, основное отличие состоит в том, что

/ .bashrc читается интерактивными оболочками, но не интерпретируется скриптами. Причина в том, что скрипты обычно имеют несколько портативный характер, и для этого вы не хотите зависеть от настроек оболочки пользователя.

Многие вещи в типичных файлах .bashrc все равно применяются только к командной строке (параметры подсказки, привязки клавиш). Некоторые, как определения функций, имеют смысл и в сценариях; как правило, вы помещаете их в отдельный файл и отправляете его как из

/ .bashrc , так и с помощью скриптов. Иногда вам нужны некоторые варианты оболочки для интерактивного использования, но не в сценариях, потому что они приводят к более короткому (хорошему в командной строке), но более загадочному или менее портативному (плохому в скриптах) коду. Есть несколько вещей, которые bash делает по-другому, например. расширение истории ( !! и т. д.) включено по умолчанию только в интерактивных оболочках.

Здесь вы используете конструкцию + (. ) , который является расширенным шаблоном клонирования ksh. Bash не включает их по умолчанию (для обратной совместимости), но вы можете включить их с помощью shopt -s extglob . По-видимому, это у вас в

Вы можете поместить shopt -s extglob в свой скрипт или использовать переносимый способ усечения 0 s от переменной, такой как

Разница между Bash, Shell, UXTerm и Terminal

В Windows у нас есть командная строка, но в Linux есть более похожие «приложения», например:

  • Ракушка
  • UXTerm
  • Терминал
  • и может быть больше

Это мой первый день на Linux, может ли кто-нибудь описать разницу между этим?

2 ответа

В Linux все они могут выглядеть одинаково с точки зрения пользователя, сидящего за клавиатурой. Различия заключаются в том, как они взаимодействуют друг с другом.

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

Терминал относится к программе-оболочке, которая запускает оболочку. Десятилетия назад это было физическое устройство, состоящее всего лишь из монитора и клавиатуры. Поскольку в системах unix / linux были добавлены улучшенные многопроцессорные и оконные системы, концепция терминала была перенесена в программное обеспечение. Теперь у вас есть такие программы, как Gnome Terminal, который запускает окно в оконной среде Gnome, которое запускает оболочку, в которую вы можете вводить команды.

UXTerm — это XTerm с поддержкой символов Юникода. Основное различие между XTerm и Terminal заключается в том, что gnome-terminal имеет больше функций, в то время как XTerm минималистичен (хотя у него есть функции, которых нет в gnome-terminal, но они более продвинутые).

Related Posts