Si hay un "First World Problems" para las secuencias de comandos, este sería el problema.
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 instrucción if, por lo que parece que me quedan dos opciones:
- Poner
EOI
una nueva línea y romper patrones de sangría o - 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 al heredoc, pero si hay una forma de evitar esto, es mi sintaxis preferida.
fuente
$dateLastChanged
) si hago lo de las comillas de hypen + en su ejemplo, pero si tomo el guión y las citas y pongo EOI en un nueva línea comienza a expandirse nuevamente.cat << EOF | sed 's/^ *//'
etc.cat <<- EOF | awk 'NR==1 && match($0, /^ +/){n=RLENGTH} {print substr($0, n+1)}'
. Esto elimina la cantidad de espacios anteriores en la primera línea de cada línea en el documento aquí (gracias a anubhava ).Si no necesita la sustitución de comandos y la expansión de parámetros dentro de su documento aquí, puede evitar el uso de pestañas agregando los espacios iniciales al delimitador:
Sin embargo, no pude encontrar una manera de usar este truco y mantener la expansión de parámetros.
fuente
shell-check
encontrará cualquier cambio de sangría que no coincida con los espacios en la cadena entre comillas. ¿Usar comillas dobles para la expansión de parámetros?Prueba esto:
fuente
Hmm ... Parece que podrías aprovechar mejor el
--format
argumento aquí para usar--printf
en su lugar y simplemente pasar el lote por una tubería. Además, suif...fi
es un comando compuesto: puede tomar una redirección que heredarán todos los comandos contenidos, por lo que tal vez no necesite anidar el heredoc en absoluto.fuente
sed
/awk
parte. Parte de mi revisión de hoy fue sacarlo ya que no estaba relacionado con la pregunta. De cualquier manera, son seis de media docena de la otra.El otro método serían las herejías:
fuente