Düzeltme: Linux'ta “Kötü Tercüman: Böyle Bir Dosya veya Dizin Yok” Hatası
Yayınlanan: 2023-05-01dos2unix
komutunu şu şekilde kullanmaktır: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 böyle değil ve düzeltme çok basit.
"Kötü Tercüman: Böyle Bir Dosya veya Dizin Yok" Hatası Nedir?
"Kötü Tercüman: Böyle Bir Dosya veya Dizin Yok" Hatası Nasıl Düzeltilir
dos2unix Komutunu Kullanma
tr Komutunu Kullanma
sed Komutunu Kullanma
vi veya vim kullanma
Geany'yi kullanma
Kate veya Kwrite'ı Kullanma
Notepad++'ı kullanma
VS Kodunu Kullanma
“Kötü Tercüman: Böyle Bir Dosya veya Dizin Yok” Hatası Nedir?
/bin/bash^M: bad interpreter: No such file or directory
şeklinde bir hata mesajı almak, kabuk betik dosyanızın yanlış satır sonlarına sahip olduğu anlamına gelir; Sonraki satır. DOS tabanlı Windows \r\n
olarak not edilmiş bir "satır başı ve satır besleme" (CRLF) sonlandırıcısını görmeyi sever. Buna karşılık, Linux, modern macOS ve diğer Unix tabanlı sistemler yalnızca "satır besleme" (LF) veya \n
kullanır.
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, Windows bilgisayarı tarafından ayarlanan \r\n
satır sonlarını görür ve kabuğun betiğinizi doğru şekilde yorumlamasını engellediği için üzülür.
file
komutunu betiğinize işaret ederek sorunu bir Linux terminalinde bile onaylayabilirsiniz.
dosya 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
Yalnızca DOS (aka, Windows) dosyalarını uygun bir şekilde dos2unix
adlı tamamen Unix uyumlu dosyalara dönüştürmek için yapılmış bir komut satırı programı var. Çoğu varsayılan depoda mevcuttur, bu nedenle onu Ubuntu'ya şu şekilde kurabilirsiniz:
sudo apt dos2unix'i kurun
Fedora kurulumumuzda dos2unix
önceden yüklenmiş olarak geldi, ancak sahip olduğunuzu onaylayabilirsiniz:
sudo dnf dos2unix'i kurun
Arch Linux'ta:
sudo pacman -S dos2unix
dos2unix
kullanmak basittir; sadece dosya adını ver.
dos2unix komut dosyası1.sh
Komut dosyanızı çalıştırmadan önce dönüştürmenin başarılı olduğunu onaylamak istiyorsanız file
ile kontrol edin. 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 betiği*.sh
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. CRLF'ye geri dönmek isterseniz, unix2dos
ters biçiminde bile kullanabilirsiniz. Daha fazla bilgi edinmek için dos2unix --help
girin.
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. tr
komutuyla, satır sonlarının \r
kısmını sıyırabilirsiniz, böylece elimizde \n
sonlandırıcılar kalır.
tr -d '\r' < script1.sh > script1_unix.sh
Burada tr
, script1.sh
dosyasının metnini alıyor, bulduğu her \r
örneğini siliyor ve çıktıyı script1_unix.sh
dosyası olarak kaydediyor.
sed Komutunu Kullanma
Kabuğunuzda yerleşik olan güçlü sed
komutu, dosyanız için satır sonlarını da değiştirebilir.
sed -i 's/\r//' script1.sh
sed
sözdizimine aşina değilseniz, sed
dosyamızı ( -i
) düzenlemesini ve her satırbaşını ( \r
) hiçbir şeyle değiştirmesini ( s/
) söylüyoruz. Bu da bizi Unix'in tercih edilen \n
satır sonlandırıcıları ile baş başa bırakıyor.
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.
:dosya biçimini ayarla=unix
İLİŞKİ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 ayarlar arama çubuğuna eol
yazarak VS Code'u varsayılan olarak Unix satır sonlarını kullanacak şekilde ayarlayabilirsiniz. En üstteki sonuç, “Eol” ayarı için bir açılır menü olmalıdır. “\n” olarak değiştirin.
İLİŞKİLİ: Bash Betiklerinizin Donanım Farkındalığını Nasıl Sağlarsınız?