Ответ 1
Да, есть много путаницы в отношении этих условий. Я дам ему удар, но при условии, что это действительно семантика, и термины используются взаимозаменяемо в повседневной речи:
"Shell" - это термин, используемый для любой программы, которая запускает другие. Он обертывает другую программу, отсюда и ее название. Так, например, Windows Explorer - это оболочка, хотя очень немногие люди называют ее одним. На всех языках и платформах, которые я использовал, любая программа может быть оболочкой.
EDIT: я не определил "терминал". Он получает свое имя от конечной точки связи с пользователем. В частности, это было устройство пишущей машинки, используемое для связи с конечным пользователем. Сегодня он является более общим и может означать псевдотерминал (pts в Linux ps -ef
), который представляет собой сеанс, основанный на символах, управляемый графическим интерфейсом. В Windows это будет называться "консольным окном".
"Консоль" означает что-то конкретное, но другое, в Windows и UNIX. В UNIX первоначально это был tty (TeleTYpewriter, VDU был "стеклянным телетайпом" ), который был физически подключен к машине, даже с помощью ключа (я долго возвращаюсь к UNIX). Это был терминал, который отправил и получил сообщения о запуске и закрытии, а также предупреждения, такие как PANIC. Скрипты оболочки bash и Korn могут выполняться как псевдо-демоны без консоли TTY/.
Термин "консоль" часто путают с более точными "стандартными вводами", "стандартным выходом" и "стандартной ошибкой" (stdin, stdout, stderr, с C). Они иногда называются потоками, и по умолчанию они назначаются терминалу в большинстве систем. В UNIX они являются первыми тремя файловыми дескрипторами, в Windows - первые три файла, 0, 1, 2 на обоих. Программа может направлять их в любую файловую систему, к которой у нее есть соответствующий доступ, но обычно это не так - она часто наследует их от родительского процесса (не все ОС сделали это в прошлом).
В Windows программа "Консоль" - это консольная консоль, часто неправильно известная как "поле DOS". Итак, cmd.exe - это консольная программа, но это также perl.exe, а также python.exe(но не pythonw.exe).
Командная строка - это приглашение для ввода, которое отображается интерпретатором командной строки или CLI. По соглашению в UNIX он заканчивается на $для всех пользователей, кроме root, который заканчивается на #. csh не следует этому соглашению и использует%. Обычно приглашение на CLI Windows заканчивается нa > . Во всех случаях они могут быть изменены пользователем.
Я считаю, что заголовок ярлыка и окна для cmd.exe в Windows имеет метку "Командная строка", потому что она дает доступ к командной строке. У меня есть книга Microsoft Press под названием "Командная строка Windows", в которой говорится: "Командная строка... доступна через окно командной оболочки". Поэтому даже Microsoft смешивает свои термины.
Итак, cmd.exe - это оболочка и CLI, а также консольная программа. sqlplus - это CLI, но не оболочка, в Windows это консольная программа. Проводник Windows - это оболочка, но не CLI или консольная программа. bash и оболочка Korn - это обе оболочки с CLI и могут запускаться с консоли, но не только так.