Sorun, dediğiniz gibi, DOS formatı. Daha spesifik olarak: DOS newline formatı.
- DOS yeni satır formatı iki karakterli bir dizedir: satırbaşı karakteri ve ardından satır besleme karakteri.
- Unix / Linux newline formatı yalnızca bir karakterdir: satır besleme karakteri.
Satır besleme karakteri, genellikle \nsatır başı karakteri yazıldığı gibi yazılır \r.
DOS bildirimi .bashrcolan bir dosyaya sahipseniz PS1ve bash dosyayı okuduğunda aşağıdakileri okuyacaktır:
PS1='XXX'\r\n
Bash için Satır hemen önce biter \n. Yani değişken PS1olarak tanımlanır 'XXX'\r. Bu, XXXsatır başına bir satır başı gelir. Satır başı, satır başı (yanıp sönen imleç) satırın başına dönmek anlamına gelir. Bash tam olarak bunu yapıyor.
Newline hakkında wikipedia makalesinde problemli newline hakkında daha fazla bilgi edinin .
Bir dosyanın dos veya unix / linux newlines kullanıp kullanmadığını hızlı bir şekilde kontrol etmek için aşağıdaki filekomutu kullanabilirsiniz :
$ file bashrc
bashrc: ASCII text
$ file bashrc_dosnewlines
bashrc_dosnewlines: ASCII text, with CRLF line terminators
CRSatır İadesi ve LFSatır Beslemesidir.
Ayrıntılı bir kontrol için, örneğin altıgen damper kullanın xxd:
$ xxd bashrc
0000000: 5053 313d 2758 5858 270a PS1='XXX'.
$ xxd bashrc_dosnewlines
0000000: 5053 313d 2758 5858 270d 0a PS1='XXX'..
Kısa açıklama: Çıktının üç sütunu vardır. İlk sütun, dosyadaki uzaklıktır. İkinci ve sonraki sütunlar dosyanın onaltılık gösterimidir. Son sütun, dosyanın insan tarafından okunabilir temsilidir. Noktalar, insan tarafından okunabilir bir ifadesi olmayan karakterler için kullanılır.
Her onaltılık basamak çifti, ASCII kodlaması durumunda bir karakter anlamına gelen bir bayt anlamına gelir. Örneğin 50bir Pve 53bir S. Diğer karakterler için ASCII kodlarına bakınız .
0aolduğu \nve 0d0abir \r\n. 0d0aDosyanızda bir grup s gördüğünüzde, bu, dosyanızın dos newlines kullandığının bir işaretidir.