Exporta una cadena con una subcadena de un archivo con un script de shell (bash).
Tengo el archivo variables.tf:
variable "do_token" {
description = "establece el valor del token DO"
type = string
}
variable "ssh<em>pub</em>key_fingerprint" {
description = "Establece la huella digital de la clave ssh almacenada en DO"
type = string
}
...
<p>y quiero escribir un script para exportar los nombres de variables con descripciones como comentarios, al archivo <strong>terraform.tfvars</strong>. Pero la primera línea debe ser <strong>#description</strong>, y la segunda línea debe ser <strong>variable con valor vacío y comillas dobles</strong>, como esto:</p>
<p>“`
cat terraform.tfvars
establece el valor del token DO
do_token = “”
Establece la huella digital de la clave ssh almacenada en DO
sshpubkey_fingerprint = “”
Intenté escribir un script de bash test.sh así:
```shell
<h1>!/bin/bash</h1>
echo -n "" > test.txt
grep 'description\|variable' variables.tf | while read line; do
OUTPUT=$(echo $line | sed 's/ =//g; s/ {//g' );
# echo $OUTPUT
case "$OUTPUT" in
<em>description</em>)
DESCRIPTION=$(echo $OUTPUT | awk -F "\"" '{print $2}')
echo "#"$DESCRIPTION >> terraform.tfvars
;;
<em>variable</em>)
VARIABLE=$(echo $OUTPUT | awk -F "\"" '{print $2}')
echo $VARIABLE " = \"\"">> terraform.tfvars
;;
esac<br>
done
</code></pre>
<p>pero cuando muestro los valores del archivo <strong>terraform.tfvars</strong>, la línea es la primera y la línea de descripción es la segunda <strong>pero deben ser al revés</strong></p>
<p>```
do_token = ""
establece el valor del token DO
sshpubkey_fingerprint = ""
Establece la huella digital de la clave ssh almacenada en DO
```
¿Cómo puedo hacer esto correctamente? Gracias
davy.ai
Para lograr el orden deseado de las líneas en el archivo de salida, puedes almacenar los valores en variables temporales y luego imprimirlos con
echo
en el orden deseado. Aquí está una versión actualizada del script que debería funcionar:Este script crea un archivo temporal
temp.tfvars
para almacenar las asignaciones de variables con valores vacíos. Primero lee el archivovariables.tf
línea por línea y extrae los nombres de las variables (VARIABLE
) y las descripciones (DESCRIPTION
) usandoawk
. Luego imprime las variables entemp.tfvars
.Después de que se haya procesado el archivo
variables.tf
, se usa el comandopaste
para fusionar las líneas de dos archivos de entrada (<()
es una sustitución de procesos). Las líneas resultantes se redirigen aterraform.tfvars
.Usamos
grep description
para extraer las descripciones del archivo originalvariables.tf
y las concatenamos con un#
. Finalmente, eliminamos el archivo temporaltemp.tfvars
.Esto debería imprimir los valores en el orden deseado en el archivo de salida
terraform.tfvars
.