Bash agregando \r a cada cadena

Bash agregando \r a cada cadena

Estoy intentando crear un script BASH de Linux simple, pero observo que bash agrega \r a cada cadena, y si intento eliminarlo con 'tr', ¡simplemente agrega uno nuevo! Aquí está mi guión

#!/bin/bash
OUTFILE=$(echo -n `date +"%Y-%m-%d_%H-%m-%S"`)
ASD='DDD'
echo -n "DATE [$OUTFILE]"
echo -n "DDD [$ASD]"

y aquí está la salida

 bash -x backup-datadir.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_13-03-44
+ OUTFILE=$'2020-03-09_13-03-44\r'
+ ASD=$'DDD\r'
' echo -n 'DATE [2020-03-09_13-03-44
' echo -n 'DDD [DDD-03-44

¿Por qué aparece ese \r extra? El ] desapareció porque se sobrescribe después de la nueva línea. Nunca había visto esto antes...

Respuesta1

Su script es un archivo de texto DOS, lo que significa que contiene un carácter de retorno de carro (a menudo escrito \r) al final de todas y cada una de las líneas. Los archivos de texto Unix no tienen esto, y cuando un sistema Unix genera dicho carácter, hace que la posición del cursor se mueva al principio de la línea. La salida adicional a esa línea sobrescribirá lo que se envió anteriormente allí.

Convertir el script a un archivo de texto Unix resolverá su problema:

$ bash -x script.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_21-03-47
+ OUTFILE=$'2020-03-09_21-03-47\r'
+ ASD=$'DDD\r'
' echo -n 'DATE [2020-03-09_21-03-47
' echo -n 'DDD [DDD-03-47
$ dos2unix script.sh
dos2unix: converting file script.sh to Unix format...
$ bash -x script.sh
+++ date +%Y-%m-%d_%H-%m-%S
++ echo -n 2020-03-09_21-03-03
+ OUTFILE=2020-03-09_21-03-03
+ ASD=DDD
+ echo -n 'DATE [2020-03-09_21-03-03]'
DATE [2020-03-09_21-03-03]+ echo -n 'DDD [DDD]'
DDD [DDD]

(no hay una nueva línea después de la salida en la última línea debido al uso echo -n).

$ bash script.sh
DATE [2020-03-09_21-03-19]DDD [DDD]

(no hay una nueva línea después de la salida en la última línea debido al uso echo -n).

información relacionada