Являются ли терминалы и оболочки одинаковыми?

Я когда-то реализовал аналогичную идею, такую ​​как функция оболочки, которую я называю psg (для «ps | grep»)

psg() {
    local -a patterns=()
    (( $# == 0 )) && set -- $USER
    for arg do 
        patterns+=( "-e" "[${arg:0:1}]${arg:1}" )
    done
    ps -ef | grep "${patterns[@]}"
}

Это использует трюк для размещения первого символа шаблон в скобках, поэтому вы получаете

ps -ef | grep "[s]omename"

Это позволяет вам отбросить часть grep -v grep конвейера.

Если вы не передадите какие-либо аргументы, он использует ваши имя пользователя для поиска ваших процессов.

27
задан 8 March 2012 в 19:05

5 ответов

Терминальный эмулятор (часто называемый терминалом) - это «просто окно», да. Он запускает текстовую программу, которая по умолчанию является вашей оболочкой входа (которая является bash в Ubuntu). Когда вы вводите символы в окне, терминал рисует эти символы в окне в дополнение к отправке его на stdin оболочки (или другой программы). Символы, выводимые оболочкой на stdout и stderr, отправляются на терминал, который, в свою очередь, рисует эти символы в окне.

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

29
ответ дан 25 May 2018 в 13:39
  • 1
    Как вы можете использовать оболочку без терминала? – Koray Tugay 10 June 2015 в 22:00
  • 2
    @KorayTugay, когда вы запускаете сценарий оболочки из cron или через панель запуска рабочего стола (где вы не проверяли «запускать в терминале»), вы используете оболочку без терминала. – geirha 10 June 2015 в 22:17

Я думаю, что этот вопрос был тщательно изучен на сайте Unix и Linux stackexchange: Различия между оболочкой, консолью и терминалом

8
ответ дан 25 May 2018 в 13:39
  • 1
    Может быть, вы могли бы добавить существенные части ссылки в свой ответ? – jokerdino♦ 9 March 2012 в 18:28
  • 2
    Это не ответ, это комментарий. – Koray Tugay 10 June 2015 в 22:00

Да, эмулятор терминала и оболочка - это две разные программы. Как вам известно, один из примеров разницы заключается в том, что запуск терминального окна может запускать разные оболочки в зависимости от того, что вы настроили (bash, tcsh, ksh, ash, even python!).

Еще одно отличие заключается в том, что эмуляторов терминалов больше, чем только по умолчанию: gnome-terminal, несколько разновидностей xterm, консоль (для KDE) и т. д. (см .: http://www.howtogeek.com/howto/ubuntu/set-the- default-terminal-emulator-on-ubuntu-linux /). Любая оболочка может быть запущена в любом из этих эмуляторов терминала без особых трудностей.

Третье отличие состоит в том, что помимо запуска команд оболочки вы также можете запускать определенные интерактивные приложения в своем эмуляторе терминала, и они будут запускаться в том же окне (и все еще полагаться на ту же программу эмулятора терминала для обработки фактической графики), например, текстовый редактор vim, RPG Nethack и другие. Если вы захотите, вы можете настроить профиль в своем эмуляторе терминала, чтобы начать взломать, скажем, автоматически, когда вы открыли новую вкладку; никакая оболочка не задействована, но эмулятор терминала по-прежнему остается одной и той же программой.

Четвертое различие заключается в том, что вы можете выполнять удаленные логины, используя такую ​​программу, как ssh, из окна терминала. В этом случае ваша оболочка (или любая другая программа, которую вы запускаете удаленно) запускается на другом компьютере, а программа ssh соединяет ее с программой эмуляции локального терминала, запущенной на вашем компьютере, которая обрабатывает графику.

3
ответ дан 25 May 2018 в 13:39

Я думаю, что этот вопрос был тщательно изучен на сайте UNIX и Linux stackexchange: Различия между оболочкой, консолью и терминалом

8
ответ дан 31 July 2018 в 11:34

Я думаю, что этот вопрос был тщательно изучен на сайте UNIX и Linux stackexchange: Различия между оболочкой, консолью и терминалом

8
ответ дан 10 August 2018 в 07:56

Другие вопросы по тегам:

Похожие вопросы: