Descripción general
`sh` es uno de los shells predeterminados en sistemas Unix y Linux, utilizado para la ejecución de scripts y el procesamiento interactivo de comandos. Cumple estrictamente con el estándar POSIX, lo que hace que los scripts escritos para `sh` sean ventajosos para mantener una alta compatibilidad en diversos sistemas.
Características principales
- Compatibilidad POSIX: Proporciona la base para escribir scripts de shell estándar
- Ejecución de scripts: Ejecuta secuencias de comandos almacenadas en archivos
- Interpretación interactiva de comandos: Recibe y procesa comandos directamente del usuario
- Incluido por defecto en el sistema: Viene preinstalado en la mayoría de los sistemas Unix/Linux
Opciones principales
`sh` ofrece varias opciones que afectan la forma en que se ejecutan los scripts o su depuración.
Ejecución y depuración de scripts
Comando generado:
Combina los comandos.
Descripción:
`sh` Ejecutando el comando.
Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.
Ejemplos de uso
Ejecutar archivo de script
sh my_script.sh
Ejecuta un archivo de script de shell especificado usando `sh`.
Ejecutar cadena de comandos directamente
sh -c "echo 'Hello from sh!' && ls -l"
Ejecuta una cadena de comandos entre comillas usando `sh` con la opción `-c`.
Ejecutar script en modo de depuración
sh -x debug_script.sh
Depura un script rastreando su proceso de ejecución con la opción `-x`.
Ejecutar comandos desde la entrada estándar
echo "ls -a" | sh
Ejecuta comandos pasados a través de una tubería usando `sh`.
Salir inmediatamente en caso de error
sh -e error_prone_script.sh
Configura el script para que termine inmediatamente si ocurre un error.
Consejos y precauciones
`sh` es una herramienta potente, pero es importante comprender sus diferencias con otros shells.
Al escribir scripts
- Es recomendable especificar que el script se ejecute con
shusando#!/bin/shen la primera línea del script. - Las características extendidas de otros shells como
bashozsh(por ejemplo, arrays, coincidencias de patrones avanzadas, sentencias condicionales[[ ... ]]) pueden no funcionar ensh, por lo que solo se deben usar sintaxis compatibles con POSIX. - La opción
-xes muy útil para depurar, ya que ayuda a comprender el flujo del script y a verificar los valores de las variables.
Compatibilidad
En la mayoría de las distribuciones de Linux, /bin/sh es un enlace simbólico a dash (en familias Debian/Ubuntu) o bash (en familias Red Hat/Fedora). Por lo tanto, los scripts de sh se ejecutan en el modo de compatibilidad POSIX del shell enlazado. Esto significa que pueden comportarse de manera diferente a los scripts de bash.