SED funktioniert nicht wie gewollt Linux?
Hallo,
ich habe ein Script (Bash), dass bei meiner SSHD Config hinter AllowedUsers Benutzernamen eintragen soll, die Komma separiert sind. Also die Variable für user sieht z.B. so aus:
user="user1,user2,user3,..."
Mit SED (und Schleife) mache ich dann
if [[ -n "$sshUser" ]]; then
IFS=',' read -ra ADDR <<<"$sshUser"
for i in "${ADDR[@]}"; do
sed -i "/^AllowUsers/ s/$/ ${i}/" /etc/ssh/sshd_config
done
fi
Funktioniert an sich gut, aber aus irgendeinem Grund steht dann folgendes in der Config:
AllowUsers^M user1 user2 user3 ...
Wie bekomme ich dieses ^M weg, bzw. warum ist es überhaupt da?
Danke für alle Antworten im Voraus
1 Antwort
Du kannst unter Linux einmal mit sed die ^M ersetzen: sed 's/\r$//' in > out
Das kommt daher, wenn du Dateien unter Windows mit einem Texteditor bearbeitest, der eben Windows-Zeilenenden (\r\n) - das \r wird auch als ^M oder LF dargestellt - verwendet. Bei Notepad++ (bearbeiten->Format Zeilenende) oder gvim (:set fileformat=unix) kann man das umstellen, das der wie unter Linux üblich nur \n als Zeilenende verwendet.
Ich denke mal, du liest $sshUser aus einem File, und in dem File ist am Ende eine Windows-Zeilenende, daher kommt das mitten in der Config.