.sh dosyası yapılamıyor: / bin / bash ^ M: bad interpreter

72

Bir kabuk komut dosyası yürütmek istedim:

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

Standart bir prosedür yapmayı denedim, ancak şu hatayı aldım:

./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**

Bu ne anlama geliyor? Bunu root grubunun root kullanıcısı olarak yapıyordum.

Bu, dosyanın root kullanıcısı için doğru izne sahip olmadığı anlamına mı geliyor?

    
sordu user165062 06.06.2013 22:17

7 cevap

126

Bu bir izin sorunu değil, izinlerle ilgili bir ileti almıyorsunuz

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

Komut dosyası, /bin/bash^M adresinde bulunan bir kabuk tarafından yürütülmesi gerektiğini belirtir. Böyle bir dosya yok: /bin/bash denir.

^M bir satır başı karakteri "dir. Linux, bir satırın sonunu işaretlemek için satır besleme karakterini kullanır, oysa Windows iki karakter dizisi CR LF kullanır. Dosyanızda Linux kafa karıştırıcı olan Windows satır sonları var.

Sahte CR karakterlerini kaldırın. Aşağıdaki komutla yapabilirsiniz:

sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh
    
verilen cevap Gilles 06.06.2013 22:25
15

Vim'de, :set ff=unix dosyasını kullanabilir ve ardından dosyayı kaydedebilir ya da DOS formatını yeniden oluşturmak için :set ff=dos 'yi kullanabilirsiniz.

    
verilen cevap ortang 07.06.2013 10:33
10

Dosyanızda DOS / Windows stili satır sonları (CR LF) var , ancak Unix benzeri sistemlerde yalnızca LF denetim karakteri satır sonu olarak kullanılıyor.

Ek CR kontrol karakteri , çıkışınızda ^M olarak kodlanmış olarak gösterilir. % Co_de% dosyasını çalıştırdığınızda da görebilirsiniz.

Satır sonlarını DOS / Windows stilinden Unix stiline dönüştürmek için cat -A create_mgw_3shelf_6xIPNI1P.sh adlı bir araç var. Bunu kullanarak yükleyin:

sudo apt-get install dos2unix

Ardından, dosyaların satır sonlarını her iki şekilde de

kullanarak dönüştürebilirsiniz.
dos2unix FILENAME
unix2dos FILENAME

Durumunuzda, aşağıdaki komutu çalıştırın ve komut dosyası yerinde dönüştürülecektir:

dos2unix create_mgw_3shelf_6xIPNI1P.sh

Bundan sonra, Bash dosyayı doğru şekilde yorumlayabilmelidir.

    
verilen cevap Byte Commander 15.12.2016 21:31
4

Diğer cevaplarda açıklandığı gibi, bu bir biçim sorunudur. Yani, cevap, formatı DOS'tan Unix stili satır sonlarına dönüştürmektir. Bu, dosyanızı 'yerinde' düzeltmenin başka bir basit yoludur

fromdos file

Bu paket tofrodos :

adresinde mevcut
sudo apt-get install tofrodos
    
verilen cevap josediazaz 08.06.2013 00:50
3

vi <your script> .

yap.

sonra :set list ; komut dosyanızdaki özel karakterlerden herhangi birini gösterecektir.

sonra karakteri değiştirin:

:%s/^M//gc [için ^M tuşuna bas Ctrl + v + m ]

    
verilen cevap Pankaj Sain 07.06.2013 09:41
2

Ayrıca istenmeyen karakterleri kaldırmak için gedit'i de kullanabilirsiniz. Dosya menüsü altında Farklı Kaydet'i seçin ve satır sonu unix / Linux'u ayarlayın.

    
verilen cevap tphistry 03.12.2013 03:40
2

Dos ile düzenlediğiniz Sorununuz!

dosyanızı vi ile aç sonra unix ile ayarlayın:

:set ff=unix
:wq

ve hepsi iyi

    
verilen cevap DaFreder 28.04.2016 18:29

Etiketlerdeki diğer soruları oku