Tema: bash
-
Simulación y confirmación en scripts de administración: -WhatIf/-Confirm de PowerShell y un indicador --dry-run en shell
PowerShell incluye un mecanismo integrado, SupportsShouldProcess, que dota a una función propia de auténticos parámetros -WhatIf y -Confirm, conectados a la misma llamada $PSCmdlet.ShouldProcess() que usan los cmdlets integrados. Los scripts de shell no traen nada equivalente integrado, así que el indicador --dry-run hay que propagarlo a mano.
-
Cómo escribir scripts de administración idempotentes: comprobar antes de cambiar, archivos drop-in y comentarios marcadores
Un script de administración que un agente pueda volver a ejecutar tras un fallo parcial o por una programación repetida debe dejar el sistema en el mismo estado se ejecute una vez o cinco. Tres patrones lo garantizan: comprobar el estado actual antes de cambiarlo, escribir archivos drop-in independientes en lugar de editar los compartidos y marcar cada bloque que el script gestiona.
-
zsh como shell predeterminado de macOS: qué falla en un script escrito para bash
Desde macOS 10.15, zsh es el shell de inicio de sesión e interactivo predeterminado; un script que da por hecho la división de palabras de bash, los arrays con índice cero o un globbing permisivo puede comportarse de otro modo o fallar en la sesión interactiva zsh de un agente en un Mac, sin contar siquiera la antigüedad de /bin/bash.
-
Evitar ejecuciones simultáneas de un script de administración: flock, lockf y un mutex con nombre en Windows
Un script de administración programado o lanzado por un agente, que puede volver a iniciarse antes de que termine la ejecución anterior, necesita un bloqueo y no la esperanza de que eso no ocurra. flock(1) en Linux y lockf(1) en FreeBSD asocian un bloqueo consultivo a nivel de kernel a un proceso en ejecución, por lo que no puede quedar obsoleto como un archivo PID residual; en Windows se logra lo mismo con un System.Threading.Mutex con nombre.
-
Códigos de salida como contrato entre los scripts y el agente que los invoca
Un agente que ejecuta un script y continúa según su código de salida necesita que ese código signifique lo que dicen las convenciones del shell: 0 para éxito, números positivos pequeños para los fallos que define el propio script, 126/127 para un comando que no pudo ejecutarse y 128+n para la terminación por señal; además necesita pipefail o PIPESTATUS para ver el código real a través de una tubería.
-
Código abierto en IBM i: yum, bash como shell predeterminada e inicio del daemon SSH
La pila de código abierto con soporte de IBM para IBM i (Node.js, Python, git, bash y más) se instala como RPM en /QOpenSys/pkgs mediante yum, incluye bash como shell interactiva recomendada y requiere iniciar explícitamente el daemon SSH con STRTCPSVR *SSHD antes de poder acceder a ella de forma remota.
-
Rutas con espacios y caracteres especiales en bash, zsh, PowerShell y cmd
El mismo nombre de archivo con un espacio, un comodín o un guion inicial rompe un hábito de scripting distinto en cada shell: una expansión sin comillas en bash o zsh, un -Path de PowerShell que interpreta comodines y un argumento sin comillas en cmd. Cada shell tiene su propia vía para tratar la ruta de forma literal, y find y xargs necesitan separación por carácter nulo para que los nombres sobrevivan al paso entre ambos.
Legible por máquina: JSON