Estoy tratando de configurar un archivo con un script bash. Y las variables en el script bash no están escritas en el archivo como está escrito en el script.
Ex:
#!/bin/bash printf "%s" "template("$DATE\t$HOST\t$PRIORITY\t$MSG\n")" >> /file.txt exit 0
Esto da como resultado template('tttn') en lugar de template("$DATE\t$HOST\t$PRIORITY\t$MSG\n in file.
¿Cómo escribo en el script para que el resultado sea template("$DATE\t$HOST\t$PRIORITY\t$MSG\n en el archivo configurado?
¿Es posible escribir la variable como se ve en el script para archivar?
Encierre las cadenas que desea escribir entre comillas simples para evitar el reemplazo de variables.
> FOO=bar > echo "$FOO" bar > echo '$FOO' $FOO >
Usar printf
en cualquier script de shell es poco común, solo use echo
con la opción -e
. Le permite usar metacaracteres ANSI C, como \t
o \n
. Sin embargo, el \n
al final no es necesario, ya que echo
agregará uno.
echo -e "template(${DATE}\t${HOST}\t${PRIORITY}\t${MSG})" >> file.txt
El problema con lo que ha escrito es que los metacaracteres ANSI C, como \t
, solo se pueden usar en el primer parámetro para printf
.
Así que tendría que ser algo como:
printf 'template(%s\t%s\t%s\t%s)\n' ${DATE} ${HOST} ${PRIORITY} ${MSG} >> file.txt
Pero espero que ambos estemos de acuerdo, que esto es muy duro para los ojos.