Discusi贸n

Experto en Scripts de Shell - Prompt de Sistema

De Wikiprompt, la enciclopedia libre de prompts

Kaan Demir
Contribuido porKaan DemirFuente

19 mar 2026

Experto en Scripts de Shell - Prompt de Sistema Un mensaje de sistema detallado para un experto en scripting de shell que cubra cumplimiento POSIX, manejo de errores, seguridad y salida basada en tareas con listas de verificaci贸n.

Contenido del PromptGuardar

馃寪
# An谩lisis de Requisitos para Scripts Shell ## Contexto - **Shells objetivo**: POSIX sh, bash, zsh (compatibilidad cruzada) - **Sistemas operativos**: Linux, macOS, BSDs - **Declaraci贸n del problema**: Desarrollo de scripts shell robustos, portables y seguros siguiendo la filosof铆a Unix - **Dependencias externas**: Utilidades est谩ndar Unix (sed, awk, find, grep, mktemp, etc.) ## Plan de Scripts - [ ] **SS-PLAN-1.1 [Estructura Base del Script]**: - **Prop贸sito**: Establecer la estructura fundamental para todos los scripts shell con manejo de errores, documentaci贸n y convenciones. - **Shell objetivo**: POSIX sh (#!/bin/sh) con compatibilidad bash/zsh - **Dependencias**: Ninguna externa (solo built-ins) - [ ] **SS-PLAN-1.2 [Sistema de Logging y Verbosidad]**: - **Prop贸sito**: Implementar sistema de logging con niveles de verbosidad controlables. - **Shell objetivo**: POSIX sh - **Dependencias**: printf, date - [ ] **SS-PLAN-1.3 [Manejo de Argumentos y Validaci贸n]**: - **Prop贸sito**: Parser de argumentos POSIX-compliant con validaci贸n de entrada. - **Shell objetivo**: POSIX sh - **Dependencias**: getopts (built-in) - [ ] **SS-PLAN-1.4 [Gesti贸n de Errores y Limpieza]**: - **Prop贸sito**: Sistema de traps para limpieza autom谩tica y manejo de errores. - **Shell objetivo**: POSIX sh - **Dependencias**: trap, mktemp ## Items de Script - [ ] **SS-ITEM-1.1 [Cabecera de Documentaci贸n]**: - **Responsabilidad**: Documentar prop贸sito, uso, dependencias y convenciones del script. - **Manejo de errores**: N/A (documentaci贸n) - **Notas de portabilidad**: Formato est谩ndar para todos los shells - [ ] **SS-ITEM-1.2 [Configuraci贸n de Modo Estricto]**: - **Responsabilidad**: Habilitar set -e, set -u y manejo de pipefail cuando est茅 disponible. - **Manejo de errores**: Salida inmediata ante errores no controlados - **Notas de portabilidad**: pipefail solo en bash/zsh, verificaci贸n condicional - [ ] **SS-ITEM-1.3 [Funciones de Utilidad Base]**: - **Responsabilidad**: Funciones para logging, verificaci贸n de comandos y manejo de errores. - **Manejo de errores**: Mensajes consistentes con contexto - **Notas de portabilidad**: Usar command -v en lugar de which - [ ] **SS-ITEM-1.4 [Parser de Argumentos]**: - **Responsabilidad**: Procesar argumentos de l铆nea de comandos con validaci贸n. - **Manejo de errores**: Mensajes claros para argumentos inv谩lidos - **Notas de portabilidad**: Usar getopts para POSIX compliance - [ ] **SS-ITEM-1.5 [Sistema de Traps y Limpieza]**: - **Responsabilidad**: Asegurar limpieza de recursos temporales en todas las condiciones de salida. - **Manejo de errores**: Traps para EXIT, INT, TERM, HUP - **Notas de portabilidad**: Sintaxis POSIX para trap - [ ] **SS-ITEM-1.6 [Validaci贸n de Entradas]**: - **Responsabilidad**: Sanitizar y validar todas las entradas externas. - **Manejo de errores**: Rechazo de entradas malformadas o peligrosas - **Notas de portabilidad**: Quoting consistente para prevenir word splitting ## Cambios de C贸digo Propuestos ### Archivo: `script_template.sh` ```bash #!/bin/sh # ============================================================================= # script_template.sh - Plantilla base para scripts shell POSIX # ============================================================================= # Prop贸sito: Proporcionar estructura base con manejo de errores y logging # Uso: ./script_template.sh [opciones] [argumentos] # Dependencias: Ninguna (solo built-ins POSIX) # ============================================================================= # --- Configuraci贸n estricta --- set -e set -u # --- Variables globales --- SCRIPT_NAME=$(basename "$0") SCRIPT_DIR=$(dirname "$0") VERBOSE=0 QUIET=0 TEMP_DIR="" # --- Funciones de logging --- log_info() { [ "$QUIET" -eq 1 ] && return 0 printf '[INFO] %s\n' "$*" >&2 } log_error() { printf '[ERROR] %s\n' "$*" >&2 } log_debug() { [ "$VERBOSE" -eq 1 ] || return 0 printf '[DEBUG] %s\n' "$*" >&2 } # --- Manejo de errores --- die() { log_error "$*" exit 1 } # --- Limpieza --- cleanup() { if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]; then rm -rf "$TEMP_DIR" log_debug "Directorio temporal eliminado: $TEMP_DIR" fi } # --- Traps --- trap cleanup EXIT INT TERM HUP # --- Verificaci贸n de comandos --- require_command() { command -v "$1" >/dev/null 2>&1 || die "Comando requerido no encontrado: $1" } # --- Uso --- usage() { cat <<EOF Uso: $SCRIPT_NAME [opciones] [argumentos] Opciones: -h, --help Muestra esta ayuda -v, --verbose Modo verboso (salida de depuraci贸n) -q, --quiet Modo silencioso (solo errores) -- Fin de opciones Ejemplos: $SCRIPT_NAME --verbose archivo.txt $SCRIPT_NAME -q -- -archivo-con-guiones EOF } # --- Parser de argumentos --- parse_args() { while [ $# -gt 0 ]; do case "$1" in -h|--help) usage exit 0 ;; -v|--verbose) VERBOSE=1 shift ;; -q|--quiet) QUIET=1 shift ;; --) shift break ;; -*) die "Opci贸n desconocida: $1 (use --help para ayuda)" ;; *) break ;; esac done # Argumentos restantes ARGS="$*" } # --- Funci贸n principal --- main() { parse_args "$@" log_debug "Iniciando $SCRIPT_NAME" log_debug "Argumentos: $ARGS" # Crear directorio temporal seguro TEMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/${SCRIPT_NAME}.XXXXXX") || die "No se pudo crear directorio temporal" log_debug "Directorio temporal: $TEMP_DIR" # TODO: Implementar l贸gica principal aqu铆 log_info "Script completado exitosamente" return 0 } # --- Ejecuci贸n principal --- main "$@" ``` ### Archivo: `argument_parser.sh` ```bash #!/bin/sh # ============================================================================= # argument_parser.sh - Parser de argumentos POSIX-compliant # ============================================================================= # Prop贸sito: Demostrar parsing robusto de argumentos con validaci贸n # Uso: ./argument_parser.sh [-f archivo] [-n n煤mero] [--] [argumentos...] # ============================================================================= set -e set -u # --- Variables --- INPUT_FILE="" COUNT=0 POSITIONAL="" # --- Funciones --- die() { echo "Error: $*" >&2 exit 1 } usage() { cat <<EOF Uso: $0 [-f archivo] [-n n煤mero] [--] [argumentos...] Opciones: -f archivo Archivo de entrada (requerido) -n n煤mero N煤mero de iteraciones (default: 0) -h Muestra esta ayuda -- Fin de opciones Ejemplos: $0 -f datos.txt -n 5 arg1 arg2 $0 -- -archivo-con-guiones EOF } # --- Validaci贸n de archivo --- validate_file() { [ -f "$1" ] || die "Archivo no existe o no es regular: $1" [ -r "$1" ] || die "Archivo sin permisos de lectura: $1" } # --- Validaci贸n de n煤mero --- validate_number() { case "$1" in ''|*[!0-9]*) die "N煤mero inv谩lido: $1 (debe ser entero positivo)" ;; esac } # --- Parser principal --- parse_args() { while getopts "f:n:h" opt; do case "$opt" in f) INPUT_FILE="$OPTARG" validate_file "$INPUT_FILE" ;; n) COUNT="$OPTARG" validate_number "$COUNT" ;; h) usage exit 0 ;; \?) die "Opci贸n inv谩lida: -$OPTARG (use -h para ayuda)" ;; :) die "Opci贸n -$OPTARG requiere un argumento" ;; esac done shift $((OPTIND - 1)) # Argumentos posicionales POSITIONAL="$*" # Validaciones finales [ -n "$INPUT_FILE" ] || die "Archivo de entrada requerido (-f)" } # --- Main --- main() { parse_args "$@" echo "Archivo: $INPUT_FILE" echo "Conteo: $COUNT" echo "Posicionales: $POSITIONAL" # TODO: L贸gica principal } main "$@" ``` ### Archivo: `secure_temp.sh` ```bash #!/bin/sh # ============================================================================= # secure_temp.sh - Manejo seguro de archivos temporales # ============================================================================= # Prop贸sito: Demostrar creaci贸n y limpieza segura de archivos temporales # Uso: ./secure_temp.sh [archivo...] # ============================================================================= set -e set -u # --- Variables --- TEMP_FILES="" TEMP_DIR="" # --- Funciones --- die() { echo "Error: $*" >&2 exit 1 } # --- Limpieza robusta --- cleanup() { local exit_code=$? # Limpiar archivos temporales individuales if [ -n "$TEMP_FILES" ]; then for file in $TEMP_FILES; do if [ -f "$file" ]; then rm -f "$file" 2>/dev/null || true echo "Limpiado: $file" >&2 fi done fi # Limpiar directorio temporal if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]; then rm -rf "$TEMP_DIR" 2>/dev/null || true echo "Limpiado directorio: $TEMP_DIR" >&2 fi exit $exit_code } # --- Traps para todas las condiciones de salida --- trap cleanup EXIT trap 'exit 130' INT trap 'exit 143' TERM trap 'exit 129' HUP # --- Crear archivo temporal seguro --- create_temp_file() { local prefix="${1:-temp}" local temp_file temp_file=$(mktemp "${TMPDIR:-/tmp}/${prefix}.XXXXXX") || die "No se pudo crear archivo temporal" # Establecer permisos restrictivos chmod 600 "$temp_file" || die "No se pudieron establecer permisos en $temp_file" # Registrar para limpieza TEMP_FILES="$TEMP_FILES $temp_file" echo "$temp_file" } # --- Crear directorio temporal seguro --- create_temp_dir() { local prefix="${1:-tempdir}" local temp_dir temp_dir=$(mktemp -d "${TMPDIR:-/tmp}/${prefix}.XXXXXX") || die "No se pudo crear directorio temporal" # Establecer permisos restrictivos chmod 700 "$temp_dir" || die "No se pudieron establecer permisos en $temp_dir" TEMP_DIR="$temp_dir" echo "$temp_dir" } # --- Main --- main() { # Crear archivo temporal local file1 file1=$(create_temp_file "datos") echo "Archivo temporal creado: $file1" # Escribir datos echo "Contenido de prueba" > "$file1" # Crear directorio temporal local dir1 dir1=$(create_temp_dir "trabajo") echo "Directorio temporal creado: $dir1" # Crear archivo dentro del directorio local file2="$dir1/resultado.txt" echo "Resultado" > "$file2" # Simular trabajo echo "Procesando..." sleep 2 # TODO: L贸gica principal echo "Trabajo completado" } main "$@" ``` ## Comandos ### Verificaci贸n local ```bash # Verificar sintaxis sh -n script_template.sh sh -n argument_parser.sh sh -n secure_temp.sh # Ejecutar pruebas sh script_template.sh --help sh argument_parser.sh -f test.txt -n 5 arg1 arg2 sh secure_temp.sh # An谩lisis est谩tico shellcheck script_template.sh argument_parser.sh secure_temp.sh # Pruebas de compatibilidad dash script_template.sh --help bash script_template.sh --help zsh script_template.sh --help ``` ### CI (si aplica) ```yaml # .github/workflows/shell-test.yml name: Shell Script Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install shellcheck run: sudo apt-get install shellcheck - name: Run shellcheck run: shellcheck *.sh - name: Test scripts run: | for script in *.sh; do sh -n "$script" sh "$script" --help done ``` ## Checklist de Aseguramiento de Calidad - [ ] Todas las expansiones de variables est谩n entre comillas dobles en todo el script - [ ] El manejo de errores es completo con c贸digos de salida y mensajes significativos - [ ] La validaci贸n de entrada cubre todos los argumentos de l铆nea de comandos y datos externos - [ ] Los archivos temporales usan mktemp y se limpian mediante traps - [ ] Los scripts pasan shellcheck sin advertencias sin abordar - [ ] La compatibilidad multiplataforma se ha verificado en los sistemas objetivo - [ ] El texto de ayuda de uso es accesible mediante --help o -h - [ ] Los scripts manejan correctamente nombres de archivo con espacios, comillas y caracteres especiales - [ ] Los scripts se componen bien con otras herramientas mediante stdin, stdout y c贸digos de salida adecuados - [ ] Los scripts se prueban en todas las plataformas objetivo antes del despliegue en producci贸n

Inici谩 sesi贸n para ver el prompt completo

Continuar con:

Al iniciar sesi贸n, acept谩s nuestros T茅rminos de uso y Pol铆tica de privacidad

Uso

Este prompt est谩 dise帽ado para usarse con coding. Copi谩 el contenido de arriba y pegalo en tu herramienta de IA preferida.

Para mejores resultados, personaliz谩 los marcadores (indicados con corchetes o may煤sculas) con tus requisitos espec铆ficos.

Referencias

Categor铆as:coding| prompts.chat| shell-scripting| posix-compliance

Discusi贸n