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 \n
satır başı karakteri yazıldığı gibi yazılır \r
.
DOS bildirimi .bashrc
olan bir dosyaya sahipseniz PS1
ve 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 PS1
olarak tanımlanır 'XXX'\r
. Bu, XXX
satı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 file
komutu kullanabilirsiniz :
$ file bashrc
bashrc: ASCII text
$ file bashrc_dosnewlines
bashrc_dosnewlines: ASCII text, with CRLF line terminators
CR
Satır İadesi ve LF
Satı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 50
bir P
ve 53
bir S
. Diğer karakterler için ASCII kodlarına bakınız .
0a
olduğu \n
ve 0d0a
bir \r\n
. 0d0a
Dosyanızda bir grup s gördüğünüzde, bu, dosyanızın dos newlines kullandığının bir işaretidir.