Recién comencé a usar Cmder en Windows 7 y entiendo que es un emulador de consola para Windows que brinda una mejor experiencia que usar cmd. Sin embargo, según tengo entendido, el emulador necesita ejecutar un shell para poder comunicar los comandos del usuario al sistema operativo, entonces, en Windows, ¿qué es el shell aquí? ¿CMD es el shell predeterminado para Windows?
Agradecería entender cómo están conectadas estas herramientas.
Respuesta1
Windows viene con dos shells de línea de comandos integrados: Cmd.exe y PowerShell 5. (La GUI de Windows es de hecho un "shell" en cierto sentido, pero no es undominioshell, y no es aplicable a la pregunta).
Cmder usa Cmd.exe de forma predeterminada, perofuertementelo personaliza: el mensaje interactivo real que ve no es un mensaje normal de Cmd.exe; lo muestra ConEmu, clink
que se inyecta en el proceso Cmd. (Toda la ventana "Cmder" es en realidadConEmu.)
Entonces, técnicamente, todos sus comandos aún se ejecutan a través de Cmd, pero es la biblioteca Clink inyectada la que proporciona funciones avanzadas como finalización de tabulación y combinaciones de teclas tipo Readline.
Pero además de Cmd.exe, es posible ejecutarcualquier otro caparazónen Cmder, como PowerShell o Bash (que no forma parte de Windows, pero es estándar en Linux y, a menudo, también se instala junto con Git para Windows).
Sin embargo, según tengo entendido, el emulador necesita ejecutar un shell para poder comunicar los comandos del usuario al sistema operativo.
En cierto sentido, sí, aunque los shells no son necesarios simplemente para "ejecutar" comandos (cualquier proceso puede iniciar cualquier archivo .exe en cualquier momento; así es como se crea un shell en primer lugar); más bien su trabajo esinterpretarcomandos: proporcionan cosas como bucles if/for/ while, expansión %variable%, etc. Además de eso, sin embargo, no tienen ningún acceso especial a las funciones del sistema operativo que otros programas no tendrían. 1
(Entonces, en teoría, una terminalpodríamostrar sus propios mensajes e implementar su propio lenguaje de comandos, pero rara vez se hace porque la mayoría de las personas están bastante acostumbradas, por ejemplo, a la sintaxis de Bash).
1 (Esto se aplica a Windows y a todos los sistemas tipo Unix, pero no necesariamente atodosistemas operativos. Por ejemplo, el shell de comandos DCL en OpenVMS tiene en realidad más privilegios que los programas normales, como era el caso en muchos sistemas operativos de la época; probablemente fue Unix el que rompió la tradición, siendo su shell una herramienta completamente normal y reemplazable).