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ます。
ジェニーD

迅速なヘルプに感謝します!私はwgetコマンドでファイルを受け取りましたが、それは実際にWindowsベースのファイルでした。
サムヴァンハウト14年

一部のサーバーでは使用できますdos2unixが、ホストがそのコマンドですべてのインスタンスを消去できない場合は^Mどうしますか?
user33777

1
問題を修正する別の方法:sed -i -e 's/\r//g' /path/file
アルベルスキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.