Bash fügt jedem String \r hinzu

Bash fügt jedem String \r hinzu

Ich versuche, ein einfaches Linux-BASH-Skript zu erstellen, stelle aber fest, dass Bash jedem String ein \r hinzufügt. Wenn ich versuche, es mit „tr“ zu entfernen, fügt es einfach ein neues hinzu! Hier ist mein Skript

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

und hier ist die Ausgabe

 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

Warum erscheint dieses zusätzliche \r? Das ] ist weg, weil es nach dem Zeilenumbruch überschrieben wird. So etwas habe ich noch nie gesehen...

Antwort1

Ihr Skript ist eine DOS-Textdatei, d. h. es enthält am Ende jeder Zeile ein Wagenrücklaufzeichen (oft als \r) geschrieben. Unix-Textdateien haben dies nicht, und wenn ein Unix-System ein solches Zeichen ausgibt, bewirkt dies, dass die Cursorposition ganz an den Anfang der Zeile verschoben wird. Weitere Ausgaben in dieser Zeile überschreiben dann die zuvor dort ausgegebenen Werte.

Das Konvertieren des Skripts in eine Unix-Textdatei löst Ihr Problem:

$ 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]

(aufgrund der Verwendung gibt es nach der Ausgabe in der letzten Zeile keine neue Zeile echo -n).

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

(aufgrund der Verwendung gibt es nach der Ausgabe in der letzten Zeile keine neue Zeile echo -n).

verwandte Informationen