Нет такой ошибки файла или каталога при попытке запустить скрипт запуска в 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?
user33777 30.09.15
1
Еще один способ исправить проблему:sed -i -e 's/\r//g' /path/file
Аль Бельский