dos2unix
komut, bunun gibi:
dos2unix komut dosyası1.sh
Bir Bash betiği çalıştırmayı denediniz ve “/bin/bash^M: kötü yorumlayıcı: Böyle bir dosya veya dizin yok” hata mesajı aldınız mı? Çıktı pek yardımcı değil ve neredeyse betiğinizin eksik olduğu izlenimini veriyor. Neyse ki durum bu değil ve düzeltme çok basit.
“Kötü Tercüman: Böyle Bir Dosya veya Dizin Yok” Hatası Nedir?
Okuyan bir hata mesajı alma /bin/bash^M: bad interpreter: No such file or directory
sadece, kabuk betik dosyanızın yanlış satır sonlarına sahip olduğu anlamına gelir; bir satırın sonuna yerleştirilen karakterler bir sonraki satıra geçme zamanının geldiğini gösterir. DOS tabanlı Windows, not edilmiş bir “satır başı ve satır besleme” (CRLF) sonlandırıcısını görmeyi sever \r\n
. Bunun aksine, Linux, modern macOS ve diğer Unix tabanlı sistemler yalnızca “satır besleme” (LF) veya \n
.
Bu kötü yorumlayıcı hatasını görüyorsanız, muhtemelen siz veya betiği aldığınız kişi onu bir Windows bilgisayarda yazmış olabilir. Bash bunları görüyor \r\n
Windows bilgisayarı tarafından ayarlanan satır sonları ve kabuğun betiğinizi doğru şekilde yorumlamasını engellediği için üzülür.
Sorunu bir Linux terminalinde işaret ederek bile onaylayabilirsiniz. file
komut dosyasına komut.
file script1.sh
Dosya DOS satır sonları kullanıyorsa, çıktıya eklenen “CRLF satır sonlandırıcılı” mesajını görürsünüz. Komut dosyamız uygun Unix (LF) yeni satırlarını kullanıyor olsaydı, sonlandırıcılardan hiç bahsetmezdi. Neyse ki, LF işine geri dönmek kolaydır.
“Kötü Tercüman: Böyle Bir Dosya veya Dizin Yok” Hatası Nasıl Düzeltilir
Bu hata mesajından kurtulmak ve komut dosyalarınızı normal şekilde çalıştırmaya başlamak için tek yapmanız gereken, DOS satır sonlarından Unix satır sonlarına geçiş yapmaktır. Bunu terminal komutlarıyla veya favori kod düzenleyicinizde yapabilirsiniz. Bunu düzeltmenin sekiz yolu:
dos2unix Komutunu Kullanma
Sadece DOS (aka, Windows) dosyalarını uygun şekilde adlandırılmış tamamen Unix uyumlu dosyalara dönüştürmek için yapılmış bir komut satırı programı var. dos2unix
. Çoğu varsayılan depoda mevcuttur, bu nedenle onu Ubuntu’ya şu şekilde kurabilirsiniz:
sudo apt install dos2unix
Fedora kurulumumuzda dos2unix
önceden yüklenmiş olarak geldi, ancak sahip olduğunuzu onaylayabilirsiniz:
sudo dnf install dos2unix
Arch Linux’ta:
sudo pacman -S dos2unix
kullanma dos2unix
basit; sadece dosya adını ver.
dos2unix script1.sh
ile kontrol et file
Komut dosyanızı çalıştırmadan önce dönüştürmenin başarılı olduğunu doğrulamak istiyorsanız. Ayrıca, birden çok dosyayı yalnızca bir boşlukla ayırarak adlandırarak toplu dönüştürme yapabilirsiniz.
dos2unix script1.sh script2.sh script3.sh
Veya tutarlı bir dosya adlandırmanız varsa, elbette joker karakterler kullanarak daha kısa komutlar yazabilirsiniz.
dos2unix script*.sh
bu dos2unix
komutu, dosya sahipliğini değiştirmek gibi özel türde dönüştürmeler yapmanıza yardımcı olacak birkaç işarete sahiptir. Ters formda bile kullanabilirsiniz, unix2dos
, CRLF’ye geri dönmek istiyorsanız. Girmek dos2unix --help
daha fazla öğrenmek için.
tr Komutunu Kullanma
Özel bir yardımcı programı kuramıyorsanız veya kurmak istemiyorsanız, Linux’ta bu yeni satırları temizleyecek yerleşik araçlar vardır. İle tr
komutunu çıkarabilirsiniz. \r
satırın bir kısmı bitiyor, bu yüzden elimizde kaldı \n
sonlandırıcılar.
tr -d '\r' < script1.sh > script1_unix.sh
Burada, tr
metnini alıyor script1.sh
dosya, her örneğini silerek \r
bulur ve çıktıyı dosya olarak kaydeder script1_unix.sh
.
sed Komutunu Kullanma
Heybetli sed
Kabuğunuzda yerleşik olan komut, dosyanız için satır sonlarını da değiştirebilir.
sed -i 's/\r//' script1.sh
aşina değilseniz sed
sözdizimi, biz söylüyoruz sed
dosyamızı düzenlemek için (-i
) ve ikame (s/
) her satır başı (\r
) hiçbir şey ile. Bu da bizi Unix’in tercihiyle bırakıyor. \n
hat sonlandırıcılar
vi veya vim kullanma
Komut dosyalarınızı düzenlemek için vi veya vim kullanıyorsanız, şu anda açık olan dosyayı Unix satır sonlarına dönüştürmek için bu komutu iletmeniz yeterlidir.
:set fileformat=unix
İLGİLİ: Vi veya Vim Düzenleyicisinden Nasıl Çıkılır?
Geany’yi kullanma
Bir masaüstü ortamında çalışıyorsanız, dosyalarınızı Unix dünyasına hazır hale getirmek için terminalde oyalanmanıza gerek yok. Hemen hemen her kod düzenleyicide ve IDE’de satır sonları için bir geçiş vardır. Buna Geany de dahil.
Geany’de satır sonlarını dönüştürmek için Belge > Satır Sonlarını Ayarla > Dönüştür ve LF’ye (Unix) Ayarla’ya gidin.
Komut dosyanızı kaydedin ve yeniden çalıştırmayı deneyin.
Kate veya Kwrite’ı Kullanma
Komut dosyanızı düzenlemek için Kwrite kullanıyorsanız veya Kwrite’ın daha güçlü kuzeni Kate kullanıyorsanız, Araçlar > Satır Sonu > Unix’e tıklayarak LF biçimine dönüştürebilirsiniz.
Dosyayı kaydedin ve betiğinizi yeniden çalıştırın.
Notepad++’ı kullanma
Kodu Notepad++’ta düzenlerseniz, satır sonlarını da kolayca dönüştürebilirsiniz; bu kullanışlıdır çünkü muhtemelen Windows’ta çalıştırıyorsunuzdur (Linux için Notepad++ yüklemediyseniz) ve bunları Linux sisteminize geçmeden önce dönüştürebilirsiniz. Dosya açıkken Düzen > EOL Dönüştürme > Unix (LF) seçeneğine gidin.
Komut dosyanızı çalıştırmadan önce kaydettiğinizden emin olun.
Notepad++’ın varsayılan olarak Unix satır sonları olan dosyalar oluşturmasını istiyorsanız, Ayarlar > Tercihler’e gidin, “Yeni Belge” sekmesini seçin ve “Biçim (satır sonu)” seçeneklerinin altında “Unix (LF)” radyo düğmesini tıklayın.
VS Kodunu Kullanma
Visual Studio Code (VS Code) hemen hemen aynı şekilde çalışır, yalnızca anahtarı bulmak daha da kolaydır. VS Code penceresinin sağ alt köşesindeki “CRLF”ye tıklamanız yeterlidir.
Dosya > Tercihler > Ayarlar’a gidip yazarak VS Kodunu varsayılan olarak Unix satır sonlarını kullanacak şekilde ayarlayabilirsiniz. eol
ayarlar arama çubuğunda. En üstteki sonuç, “Eol” ayarı için bir açılır menü olmalıdır. “\n” olarak değiştirin.
İLGİLİ: Bash Betiklerinizin Donanım Farkındalığını Nasıl Sağlarsınız?