Pertanyaan Tidak dapat mengeksekusi file .sh: / bin / bash ^ M: interpreter buruk


Saya ingin menjalankan skrip shell:

-rwxr-x--x 1 root root   17234 Jun  6 18:31 create_mgw_3shelf_6xIPNI1P.sh

Saya mencoba melakukan prosedur standar, tetapi saya mendapat kesalahan ini:

./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0 
DEBUG   cd/etc/opt/ldapfiles/ldif_in ;
./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
**ERROR  sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**

Apa artinya? Saya melakukan ini sebagai root pengguna di bawah root kelompok.

Apakah ini berarti bahwa file tersebut tidak memiliki izin yang benar untuk root pengguna?


72
2018-06-06 20:17


asal




Jawaban:


Ini bukan masalah izin, Anda tidak mendapatkan pesan tentang izin

/bin/bash^M: bad interpreter: No such file or directory

Skrip menunjukkan bahwa itu harus dieksekusi oleh shell yang terletak di /bin/bash^M. Tidak ada file seperti itu: namanya /bin/bash.

Itu ^M adalah karakter carriage return. Linux menggunakan karakter feed baris untuk menandai akhir baris, sedangkan Windows menggunakan urutan dua karakter CR LF. File Anda memiliki akhiran Windows, yang membingungkan Linux.

Hapus karakter CR palsu. Anda dapat melakukannya dengan perintah berikut:

sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh

127
2018-06-06 20:25



Atau pasang dan gunakan dos2unix program. - argentpepper
terima kasih untuk ini, semua jawaban lain yang saya temukan sejauh ini belum membantu. Yang ini berhasil! - qodeninja
tidak harus Windows, saya mendapat pesan serupa setelah menyalin skrip dari OS X ke Ubuntu ... dos2unix bekerja hebat dalam kasus itu, sedangkan mengganti '\ r' dengan tidak ada yang lebih buruk, karena tidak ada '\ n 'karakter dalam file. - Michael
@Michael macOS digunakan \n karena ini adalah Unix. Skripnya mungkin dari versi Mac OS sebelumnya? Anda bisa berlari sed -i -e 's/\r$/\n/' script.shdalam hal itu. - wjandrea
Buka di gedit dan, lakukan Save As, dan pilih "Line Ending: Unix / Linux" - Mattmon


Di vim Anda juga bisa menggunakan :set ff=unix lalu simpan file, atau :set ff=dos untuk mendapatkan format DOS lagi.


15
2018-06-07 08:33



yang ini melakukannya untuk saya, thx - bunkerdive


File Anda memiliki Akhir baris gaya DOS / Windows (CR LF), tetapi pada sistem mirip Unix hanya LF karakter kontrol digunakan sebagai jeda baris.

Tambahan CR karakter kontrol ditunjukkan dikodekan sebagai ^M dalam output Anda. Anda juga bisa melihatnya ketika Anda berlari cat -A create_mgw_3shelf_6xIPNI1P.sh.

Untuk mengubah ujung garis dari gaya DOS / Windows ke gaya Unix, ada alat yang disebut dos2unix. Anda menginstalnya menggunakan:

sudo apt-get install dos2unix

Kemudian Anda dapat dengan mudah mengonversi akhiran file file dalam kedua cara menggunakan

dos2unix FILENAME
unix2dos FILENAME

Dalam kasus Anda, jalankan perintah ini di bawah dan file skrip akan dikonversi di tempat:

dos2unix create_mgw_3shelf_6xIPNI1P.sh

Setelah itu Bash harus bisa menginterpretasikan file dengan benar.


10
2017-12-15 20:31





Sebagaimana dijelaskan dalam jawaban lainnya, ini adalah masalah format. Jadi, jawabannya adalah untuk mengubah format dari DOS ke akhir baris gaya Unix. Ini adalah cara sederhana lain untuk memperbaiki file Anda 'di tempat'

fromdos file

Ini tersedia dalam paket tofrodos:

sudo apt-get install tofrodos

4
2018-06-07 22:50





Melakukan vi <your script>.

kemudian :set list; itu akan menampilkan salah satu karakter khusus di skrip Anda.

lalu ganti karakter:

:%s/^M//gc           [mengetik ^M tekan Ctrl + v + m]


3
2018-06-07 07:41



Lihat jawaban di atas tentang penggunaan: fileformat yang IMHO lebih baik untuk menangani ini daripada substitusi global. Juga, lihat stackoverflow.com/questions/14609779/… untuk ide tentang cara menangani secara otomatis - qneill


Anda juga dapat menggunakan gedit untuk menghapus karakter yang tidak diinginkan. Di bawah menu File pilih Save As dan setel jenis baris akhir unix / Linux.


2
2017-12-03 02:40



1 untuk ini karena itu membantu saya dengan akhiran garis MacOS. - Bobble


Masalahnya adalah Anda mengedit dengan Dos!

buka file Anda dengan vi kemudian atur unix dengan:

:set ff=unix
:wq

dan semuanya baik-baik saja


2
2018-04-28 16:29