Quiero crear un mini shell para UNIX solo para conocer los pormenores de todo. Estoy teniendo algunas confusiones comprendiendo cosas que solía dar por sentado. Esta es una pregunta un tanto filosófica. Cuando creo un "shell", supongo que tengo un UNIX sin shell, así que ¿cuál sería el std in y std out en este caso? las funciones doesnt como system() y exec() usan el shell para ejecutar programas, por lo que si estoy creando un shell en primer lugar. ¿Cómo funcionan estas funciones?Crear un shell UNIX
Respuesta
Hay varias funciones en la familia exec
: execve(2)
, execl(3)
, execle(3)
, execlp(3)
, execv(3)
, execvp(3)
. El primero, execve(2)
, lo proporciona el kernel del sistema operativo como una llamada al sistema. (Bueno, está bien, la función que llaman los programas la proporciona la biblioteca C del sistema, pero es es un envoltorio simple alrededor de la llamada al sistema). Las otras funciones proporcionan semánticas ligeramente diferentes y se implementan en términos de la función execve(2)
.
Los proyectiles podrían utilizar execvp(3)
o execlp(3)
para proporcionar la búsqueda PATH
para ejecutables, pero al menos bash(1)
hashes la ruta completa de ejecutables para proporcionar una mejora en el rendimiento. (Consulte bash(1)
incorporado en hash
para obtener más información.)
system(3)
se implementa a través de /bin/sh -c
, como supondrá.
La entrada y salida estándar se configura por cualquier programa que genere el shell. Si un usuario inicia sesión en la consola directamente, será manejado por agetty(8)
o mgetty(8)
o cualquiera que sea el programa getty
-al igual que maneja inicios de sesión directos. Si un usuario inicia sesión a través de sshd(8)
, entonces sshd(8)
se encarga de crear el pty
y delegar el esclavo de la terminal al shell. Si un usuario crea sus shells a través de xterm(1)
u otros emuladores de terminal, entonces esos procesos serán responsables de conectar la entrada, salida y error estándar para el shell.
system(3)
de hecho utiliza (posiblemente directa o indirectamente a través de exec) un shell para hacer su trabajo. exec(3)
y sus amigos, sin embargo, no usan un shell, sino que ejecutan la imagen del programa especificada directamente. Puede ver esto simplemente leyendo sus respectivas páginas man
.
Una diferencia es que con system(), verá que se expanden comodines como azúcar, mientras que si pasa *
como argumento para su programa usando exec(), su programa verá el asterisco literal (y probablemente no sepa qué hacer).
Un shell se puede implementar utilizando exec(), entre otras cosas. Obtiene su stdin y stdout de algo llamado TTY (teletipo, o terminal de la vieja escuela) o PTY (pseudo-terminal, como en los sistemas modernos). Ver posix_openpt(2)
.
- 1. shell UNIX escrito en un lenguaje razonable?
- 2. shell unix variables especiales de programación
- 3. ¿Cómo ejecutar un script de shell Unix desde código Java?
- 4. ¿Valores predeterminados en un script de shell de Unix?
- 5. Cómo ejecutar un script de shell de Unix desde Windows
- 6. ¿Cómo hacer el procesamiento paralelo en el script Unix Shell?
- 7. ¿Cómo saber qué shell de Unix estoy usando?
- 8. ¿Volver a cargar .profile en script bash shell (en Unix)?
- 9. Aritmética de fecha en scripts de shell Unix
- 10. ¿Alguna vez trató de eliminar archivos con shell shell de Unix? Use la opción -delete
- 11. "Evento no encontrado" Error de comando shell en Unix
- 12. ¿Cómo comparar versiones de algunos productos en unix ksh shell?
- 13. Cómo crear un paquete de software en Unix/Linux
- 14. Crear un volcado de wordpress (.wxr) usando unix y mysql
- 15. ¿Cómo ejecutar un script de shell en una consola Unix o en un terminal Mac?
- 16. ¿Qué tan factible sería crear un shell bash en un navegador?
- 17. Crear un script de shell para ejecutar el programa Java
- 18. ¿Cómo crear un submenú en el explorer-shell-extention?
- 19. OpenSSL crear hash SHA desde shell stdin
- 20. ¿Qué significa la línea "#!/Bin/sh" en un script de shell de UNIX?
- 21. ¿Cuál es el equivalente de Windows de un script de shell de UNIX?
- 22. ¿Cómo puedo usar comodines inversos o negativos cuando coinciden patrones en un shell de Unix/Linux?
- 23. Cambiar el nombre de los archivos en un directorio UNIX - shell scripting
- 24. unix - ejecuta un comando como otro usuario
- 25. Iniciando un nuevo shell bash desde un shell bash
- 26. ¿Cómo crear una nueva variable de entorno en UNIX ....?
- 27. Crear código postal del directorio en Unix m/c
- 28. UNIX, get environment variable
- 29. Unix FIFO in go?
- 30. Seleccionar valores únicos o distintos de una lista en el script de shell de UNIX
oh gracias mucho – Keeto