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 `sh` usando `#!/bin/sh` en la primera línea del script.
- Las características extendidas de otros shells como `bash` o `zsh` (por ejemplo, arrays, coincidencias de patrones avanzadas, sentencias condicionales `[[ ... ]]`) pueden no funcionar en `sh`, por lo que solo se deben usar sintaxis compatibles con POSIX.
- La opción `-x` es 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`.