Немає такої помилки файлів чи каталогів при спробі виконання сценарію запуску в Debian


11

Дуже новачок у Debian (Raspbian), і я борюся за це вже кілька днів. У мене є сценарій запуску, який я хочу виконати при запуску.

Я виконав такі команди, щоб зробити скрипт виконуваним і додати його з параметрами за замовчуванням до послідовності запуску.

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

При спробі перевірити сценарій, я виконую наступне:

sudo /etc/init.d/testsam start

Але, роблячи це, я отримую помилку: неможливо виконати /etc/init.d/testsam: Такого файлу чи каталогу немає.

Я мінімізував сценарій до самої основної, але все ще не знаю фактичної причини. Я сподіваюся, що хтось може вказати мені на правильне рішення? Це сценарій на даний момент.

#! /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

Дякуємо за будь-яку допомогу

Відповіді:


22

У вас, ймовірно, є ^Mкінець вагона ( ) в кінці #!лінії.

Формат #!рядка дуже суворий, і повернення вагона туди не дозволено, якщо насправді не викликається ваш перекладач/bin/bash^M

Ніколи не буде повернення каретки у файл, створений за допомогою відповідного редактора unix, якщо ви не перестанете їх додавати.

Під час редагування наявного файлу, який вже використовує закінчення рядків CRLF, повернення каретки можуть бути приховані від вас. Наприклад, vim робить це. Але [dos]в рядку статусу також зазначено, що попереджає, що файл у форматі DOS. Потім можна сказати :set fileformat=unixі зберегти файл для його перетворення.


5
Щоб перевірити, чи це насправді проблема, зробіть cat -v /etc/inti.d/testsam. Якщо у вас помилкове повернення вагона, воно відобразиться як ^M.
Дженні Д

дякую за швидку допомогу! я отримав файл через команду wget, і це справді був файл на основі Windows.
Сем Ванхутт

На деяких серверах я можу використовувати, dos2unixале що робити, коли хост не дозволяє цій команді стерти всі екземпляри ^M?
користувач33777

1
Ще один спосіб виправити проблему:sed -i -e 's/\r//g' /path/file
Аль-Бельський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.