Cyhrwin'de bashrc güncelledikten sonra, imleç bilgi istemi yerine 0 numaralı sütunda başlar


2

Mesele şu ki, PS1'i bashrc'de güncellersem, varsayılan olarak imlecin istemden sonra sütun 0'a yerleştirildiğini görüyorum ve herhangi bir şey yazarsam istemin üzerine yazmaya başlar. Aynı PS1 dizesini bashrc dosyasını silerek, yeni bir seans başlatarak ve terminaldeki PS1 dizesini yazarak manuel olarak test ettim ve gayet iyi çalıştı.

Bu sorunun cevabını buldum ama bu bütün gün sürdü ve Google'ın çok fazla müdahalesinden sonra tam cevabı bulamadım. Temel sorun bashrc dosya biçimindeydi. Benim durumumda, dosya satırın iki karakterli sonunda DOS biçiminde idi. Düzeltme, dosyayı DOS'tan UNIX biçimine dönüştürmekti ve bundan sonra çalışmaya başladı. Bununla birlikte, dosya biçiminin soruna tam olarak nasıl neden olduğunu bilmiyorum, "PS1 = 'XXX'" tüm dosyada yeni satırlar olmadan tek şey olsa bile işe yaramaz.

Aşağıdaki bağlantı, dosyanın nasıl dönüştürüleceği hakkında bilgi verir: http://cs.nyu.edu/~yap/prog/cygwin/FAQs.html#bashrc

Yanıtlar:


0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.