Perbaiki: Kesalahan "Penerjemah Buruk: Tidak Ada File atau Direktori Seperti Itu" di Linux
Diterbitkan: 2023-05-01dos2unix
, 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.
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.
Anda bahkan dapat mengonfirmasi masalah di terminal Linux dengan mengarahkan perintah file
ke skrip Anda.
file script1.sh
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
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
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
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).
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.
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”.
TERKAIT: Cara Membuat Perangkat Keras Bash Script Anda Sadar