¿Por qué Terminal y Shell son dos programas separados en Linux?

¿Por qué Terminal y Shell son dos programas separados en Linux?

En Windows, cuando se utiliza la CLI, solo se utiliza un programa ( cmd.exe). Usted envía la entrada a cmd.exey, cmd.exea su vez, le envía la salida (muestra la salida en la pantalla, es decir):

ingrese la descripción de la imagen aquí

Pero en Linux se utilizan dos programas: la Terminal y el Shell.

Usted envía la entrada a la Terminal (por ejemplo:) gnome-terminal, y gnome-terminala su vez envía esta entrada al Shell (por ejemplo bash:), y luego bashenvía la salida a gnome-terminal, y gnome-terminala su vez le envía la salida.

ingrese la descripción de la imagen aquí

Mi pregunta es: ¿Por qué Terminal y Shell son dos programas separados en Linux y no un programa como en Windows?

Respuesta1

Tu premisa es incorrecta. El papel de "terminal" en Windows lo desempeña, más o menos, conhost.exe: el subsistema de la consola no está diseñado de tal manera que sea intercambiable como lo son los terminales en Linux (y existen otras diferencias, por ejemplo , cuando inicia un proceso en modo consola, como cmd.exe, que aún no está conectado a una consola, las bibliotecas del sistema que inician el proceso se encargarán de crear uno por usted), pero es una capa separada administrada por un proceso separado.

Respuesta2

Yo diría 1) por la historia, 2) porque es una buena idea.

Generalmente llamamos gnome-terminalo xterma una terminal.emulador. Antiguamente no existían emuladores de terminal, ya que no había interfaces gráficas de usuario. Todo lo que había era apropiado.Terminales, dispositivos con pantalla y teclado que se conectan mediante un cable serie.a la computadora. Los shells también eran útiles entonces y fueron escritos para admitir la recepción de comandos desde terminales. (Probablemente de descriptores de archivos arbitrarios, pero eso no importa).

Con algo como terminales virtuales y GUI de Linux, era útil hacer que emularan los terminales originales, de modo que las piezas de software antiguas simplemente funcionaran, o al menos lo hicieran con cambios mínimos. Eso no se refiere sólo al shell, sino también a otros programas que interactúan con el "terminal". ( ls? vi? emacs?)

Además, la separación es una buena idea, ya que permite intercambiar el emulador de terminal y el shell de forma independiente. Puedo usar Bash en xterm, o zsh en gnome-terminal, o Bash a través de una conexión SSH, o...

Si las partes estuvieran unidas, esta elección sería más difícil.


Por cierto, tampoco estoy muy seguro de cmd.exeimplementar la parte de emulación de terminal en sí misma. No he tocado un compilador en Windows desde hace algún tiempo, pero si mal no recuerdo, es posible crear una "aplicación de consola" sin involucrar cmd.exe. Veraquíyaquí.

Respuesta3

gnome-terminalse ejecutará bashcomo una aplicación predeterminada, pero xtermy gnome-terminallas familias están diseñadas para ejecutar comandos arbitrarios, no solo shell; puede ejecutar, por ejemplo:

xterm -e /bin/bash
xterm -e /usr/local/bin/fish
xterm -e tail -f /var/log/messages
xterm -e man ls

en el último caso, xterm me mostrará la página de manual de ls; si salgo, xtermsaldré.

en el caso de /var/log/messages, podría usar las opciones de xterm para configurar la fuente o cambiar el color.

Tenga en cuenta que gnome-terminaltambién utiliza -ela sintaxis para ejecutar comandos.

Respuesta4

Creo que porque en Linux puedes tener varios shell (bash ksh....)

En Windows solo tengo 1 programa, el cmd. Y ahora Microsoft necesita 2 programas para agregar más funcionalidad (power shell)

En Linux solo necesitas cambiar el shell para mejorar tus requisitos.

información relacionada