bash – No se puede sangrar heredoc para que coincida con la sangría del bloque de código

Pregunta:

Si hay "problemas del primer mundo" para la creación de secuencias de comandos, sería este.

Tengo el siguiente código en un script que estoy actualizando:

if [ $diffLines -eq 1 ]; then
        dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g')

        mailx -r "Systems and Operations <sysadmin@[redacted].edu>" -s "Warning Stale BB Data" jadavis6@[redacted].edu <<EOI
        Last Change: $dateLastChanged

        This is an automated warning of stale data for the UNC-G Blackboard Snapshot process.
EOI

else
        echo "$diffLines have changed"
fi

El script envía correos electrónicos sin problemas, pero el comando mailx está anidado dentro de una declaración if, así que parece que me quedan dos opciones:

  1. Coloque EOI en una nueva línea y rompa los patrones de sangría o
  2. Mantenga la sangría pero use algo como una declaración de eco para que mailx absorba mi correo electrónico.

Estoy abierto a alternativas a heredoc, pero si hay una forma de evitar esto, es mi sintaxis preferida.

Respuesta:

Puede cambiar el operador here-doc a <<- . Luego puede sangrar tanto el here-doc como el delimitador con pestañas:

#! /bin/bash
cat <<-EOF
    indented
    EOF
echo Done

Tenga en cuenta que debe usar tabulaciones , no espacios, para sangrar el documento here-doc. Esto significa que el ejemplo anterior no funcionará copiado (Stack Exchange reemplaza las pestañas con espacios). No puede haber comillas alrededor del primer delimitador EOF ; de lo contrario, la expansión de parámetros, la sustitución de comandos y la expansión aritmética no están en vigor.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım