Perbaiki: Kesalahan "Penerjemah Buruk: Tidak Ada File atau Direktori Seperti Itu" di Linux

Diterbitkan: 2023-05-01
Orang mengetik di Keyboard Mini Cherry KW 9200
Hannah Stryker / How-To Geek
Jika Anda mendapatkan kesalahan "penerjemah buruk: tidak ada file atau direktori" saat menjalankan skrip shell, Anda perlu mengonversi file skrip Anda dari akhir baris Windows ke Unix. Salah satu caranya adalah dengan menggunakan perintah dos2unix , seperti ini:

dos2unix script1.sh

Apakah Anda mencoba menjalankan skrip Bash dan mendapat pesan kesalahan "/ bin/bash ^ M: bad interpreter: No such file or directory"? Outputnya tidak terlalu membantu dan hampir memberi kesan skrip Anda hilang. Untungnya, bukan itu masalahnya, dan perbaikannya sangat sederhana.

Daftar isi

Apa itu Kesalahan "Penerjemah Buruk: Tidak Ada File atau Direktori Seperti Itu"?
Cara Memperbaiki Kesalahan "Penerjemah Buruk: Tidak Ada File atau Direktori Seperti Itu".
Menggunakan Perintah dos2unix
Menggunakan Perintah tr
Menggunakan Perintah sed
Menggunakan vi atau vim
Menggunakan Geany
Menggunakan Kate atau Kwrite
Menggunakan Notepad++
Menggunakan Kode VS

Apa itu Kesalahan "Penerjemah Buruk: Tidak Ada File atau Direktori Seperti Itu"?

Mendapatkan pesan kesalahan yang berbunyi /bin/bash^M: bad interpreter: No such file or directory hanya berarti bahwa file skrip shell Anda memiliki akhiran baris yang salah—karakter ditempatkan di akhir baris yang menunjukkan saatnya untuk pindah ke baris berikutnya. Windows yang diturunkan dari DOS suka melihat terminator “carriage return and line feed” (CRLF), dengan notasi \r\n . Sebaliknya, Linux, macOS modern, dan sistem berbasis Unix lainnya hanya menggunakan “line feed” (LF), atau \n .

Jika Anda melihat kesalahan juru bahasa yang buruk ini, kemungkinan Anda atau orang yang Anda dapatkan skrip awalnya menulisnya di komputer Windows. Bash melihat \r\n akhir baris yang disetel oleh komputer Windows dan menjadi kesal karena mencegah shell menafsirkan skrip Anda dengan benar.

Pesan kesalahan "penerjemah buruk: tidak ada file atau direktori" di baris perintah Linux.

Anda bahkan dapat mengonfirmasi masalah di terminal Linux dengan mengarahkan perintah file ke skrip Anda.

 file script1.sh 

Periksa akhiran baris file dengan perintah file di Linux.

Jika file menggunakan akhiran baris DOS, Anda akan melihat pesan "dengan terminator baris CRLF" ditambahkan di output. Seandainya skrip kami menggunakan baris baru Unix (LF) yang tepat, itu tidak akan menyebutkan terminator sama sekali. Untungnya, kembali ke bisnis LF itu mudah.

Cara Memperbaiki Kesalahan "Penerjemah Buruk: Tidak Ada File atau Direktori Seperti Itu".

Yang diperlukan untuk menghilangkan pesan kesalahan itu dan mulai menjalankan skrip Anda seperti biasa adalah beralih dari akhiran baris DOS ke akhiran baris Unix. Anda dapat melakukan ini dengan perintah terminal atau di editor kode favorit Anda. Berikut adalah delapan cara untuk memperbaikinya:

Menggunakan Perintah dos2unix

Ada program baris perintah yang dibuat hanya untuk mengubah file DOS (alias, Windows) menjadi file yang sepenuhnya kompatibel dengan Unix yang diberi nama dos2unix . Ini tersedia di sebagian besar repositori default, sehingga Anda dapat menginstalnya di Ubuntu dengan:

 sudo apt install dos2unix

Pada instalasi Fedora kami, dos2unix telah diinstal sebelumnya, tetapi Anda dapat mengonfirmasi bahwa Anda memilikinya dengan:

 sudo dnf instal dos2unix

Di Arch Linux:

 sudo pacman -S dos2unix

Menggunakan dos2unix sederhana; berikan saja nama file Anda.

 dos2unix script1.sh 

Masukkan perintah dos2unix.

Periksa dengan file jika Anda ingin mengonfirmasi konversi berhasil sebelum menjalankan skrip Anda. Anda juga dapat mengonversi secara massal dengan menamai banyak file yang dipisahkan hanya dengan spasi.

 dos2unix script1.sh script2.sh script3.sh

Atau, jika Anda memiliki penamaan file yang konsisten, tentu saja Anda dapat menulis perintah yang lebih pendek menggunakan wildcard.

 skrip dos2unix*.sh 

Gunakan tanda bintang di perintah dos2unix Anda untuk mengonversi dengan wildcard.

Perintah dos2unix memiliki beberapa tanda untuk membantu Anda melakukan jenis konversi khusus, seperti mengubah kepemilikan file. Anda bahkan dapat menggunakannya dalam bentuk terbalik, unix2dos , jika Anda ingin beralih kembali ke CRLF. Masukkan dos2unix --help untuk mempelajari lebih lanjut.

Menggunakan Perintah tr

Jika Anda tidak dapat atau tidak ingin memasang utilitas khusus, Linux memiliki alat bawaan yang akan membersihkan baris baru tersebut. Dengan perintah tr , Anda dapat menghapus bagian \r dari akhiran baris sehingga tersisa \n terminator.

 tr -d '\r' < script1.sh > script1_unix.sh

Di sini, tr mengambil teks dari file script1.sh , menghapus setiap contoh \r yang ditemukannya, dan menyimpan hasilnya sebagai file script1_unix.sh .

Menggunakan Perintah sed

Perintah sed perkasa yang dibangun di dalam shell Anda juga dapat mengubah akhiran baris untuk file Anda.

 sed -i 's/\r//' script1.sh

Jika Anda tidak terbiasa dengan sintaks sed , kami memberi tahu sed untuk mengedit file kami ( -i ) dan mengganti ( s/ ) setiap carriage return ( \r ) dengan nol. Itu membuat kita dengan \n terminator garis pilihan Unix.

Menggunakan vi atau vim

Jika Anda menggunakan vi atau vim untuk mengedit skrip Anda, cukup berikan perintah ini untuk mengonversi file yang sedang dibuka ke akhiran baris Unix.

 : atur format file = unix 

Ubah format file skrip dengan perintah vim.

TERKAIT: Cara Keluar dari Editor Vi atau Vim

Menggunakan Geany

Jika Anda bekerja di lingkungan desktop, tidak ada alasan untuk bermain-main di terminal hanya untuk membuat file Anda siap untuk dunia Unix. Hampir setiap editor kode dan IDE di luar sana memiliki toggle untuk akhiran baris. Itu termasuk Geany.

Untuk mengonversi akhir baris di Geany, buka Document > Set Line Endings > Convert dan Set to LF (Unix).

Di Geany, di bawah menu Dokumen, buka "Set Line Endings" dan pilih "Convert and Set to LF (Unix)".

Simpan skrip Anda dan coba jalankan lagi.

Menggunakan Kate atau Kwrite

Jika Anda menggunakan Kwrite untuk mengedit skrip Anda, atau Kate, sepupu Kwrite yang lebih hebat, Anda dapat mengonversi ke format LF dengan mengeklik Alat > Ujung Baris > Unix.

Di Kwrite, di menu Tools buka "End of Line" dan pilih "Unix."

Simpan file dan jalankan skrip Anda lagi.

Menggunakan Notepad++

Jika Anda mengedit kode di Notepad++, Anda juga dapat dengan mudah mengonversi akhiran baris, yang berguna karena kemungkinan besar Anda menjalankannya di Windows (kecuali jika Anda telah menginstal Notepad++ untuk Linux) dan dapat mengonversinya sebelum pindah ke sistem Linux Anda. Dengan file terbuka, buka Edit > Konversi EOL > Unix (LF).

Pastikan untuk menyimpan skrip Anda sebelum menjalankannya.

Jika Anda ingin Notepad++ membuat file dengan akhiran garis Unix secara default, buka Pengaturan > Preferensi, pilih tab "Dokumen Baru", dan di bawah opsi "Format (akhiran garis)" klik tombol radio "Unix (LF)".

Menggunakan Kode VS

Visual Studio Code (VS Code) bekerja dengan cara yang hampir sama, hanya toggle yang lebih mudah ditemukan. Cukup klik "CRLF" di pojok kanan bawah jendela VS Code.

Anda juga dapat mengatur Kode VS untuk menggunakan akhiran baris Unix secara default dengan membuka File > Preferensi > Pengaturan dan mengetik eol di bilah pencarian pengaturan. Hasil teratas harus menjadi menu drop-down untuk mengatur "Eol". Ubah ke “\n”.

Di pengaturan Kode VS, ubah pengaturan EOL default menjadi "\n".

TERKAIT: Cara Membuat Perangkat Keras Bash Script Anda Sadar