Tidak ada file atau direktori yang salah saat mencoba menjalankan skrip startup di Debian

11

Sangat baru di Debian (Raspbian), dan saya berjuang untuk yang ini selama beberapa hari. Saya memiliki skrip startup yang ingin saya jalankan saat startup.

Saya telah menjalankan perintah berikut, untuk membuat skrip dapat dieksekusi dan menambahkannya dengan parameter default ke urutan startup.

sudo chmod 755 /etc/init.d/testsam
sudo update-rc.d testsam defaults

Saat mencoba menguji skrip, saya menjalankan yang berikut:

sudo /etc/init.d/testsam start

Tetapi ketika melakukannya, saya mendapatkan kesalahan: tidak dapat menjalankan /etc/init.d/testsam: Tidak ada file atau direktori tersebut.

Saya meminimalkan skrip menjadi sangat mendasar, tetapi masih tidak tahu alasan sebenarnya. Saya harap seseorang dapat menunjukkan solusi yang tepat? Ini skrip saat ini.

#! /bin/bash

# /etc/init.d/testsam

case "$1" in
 start)
        #echo "starting script"
        ;;
 stop)
        #echo "stopping script"
        ;;
 *)
        #echo "Usage: /etc/init.d/testsam {start|stop}"
        exit 1
         ;;
esac

exit 0

Terima kasih atas bantuannya

Sam Vanhoutte
sumber

Jawaban:

22

Anda mungkin memiliki carriage return ( ^M) di akhir #!baris Anda .

Format #!garis sangat ketat, dan carriage return tidak diperbolehkan di sana, kecuali jika penerjemah Anda benar-benar dipanggil/bin/bash^M

Tidak akan pernah ada carriage return dalam file yang dibuat dengan editor unix yang tepat, kecuali jika Anda tidak ingin menambahkannya.

Saat mengedit file yang sudah ada yang sudah menggunakan ujung jalur CRLF, carriage return mungkin disembunyikan dari Anda. Sebagai contoh, vim melakukan itu. Tetapi juga tertulis [dos]di baris status untuk memperingatkan Anda bahwa file tersebut dalam format DOS. Anda kemudian dapat mengatakan :set fileformat=unixdan menyimpan file untuk mengubahnya.


sumber
5
Untuk memverifikasi apakah ini sebenarnya masalahnya, lakukan cat -v /etc/inti.d/testsam. Jika Anda memiliki carriage return yang salah, itu akan muncul sebagai ^M.
Jenny D
terima kasih atas bantuan yang cepat! Saya telah menerima file melalui perintah wget dan itu memang file berbasis windows.
Sam Vanhoutte
Pada beberapa server saya bisa menggunakan dos2unixtetapi apa yang Anda lakukan ketika tuan rumah tidak mengizinkan perintah itu untuk menghapus semua contoh ^M?
user33777
1
Cara lain untuk memperbaiki masalah ini:sed -i -e 's/\r//g' /path/file
Al Belsky