尝试在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

谢谢你的帮助

Answers:


22

您可能^M在行尾有回车符()#!

#!行的格式非常严格,并且不允许在此行中使用回车符,除非您的解释器实际被调用/bin/bash^M

除非您全力以赴,否则在使用适当的Unix编辑器创建的文件中绝不会出现回车符。

编辑已经使用CRLF行尾的现有文件时,回车可能对您隐藏了。例如,vim做到了。但是它还[dos]在状态行中说警告您该文件为DOS格式。然后:set fileformat=unix,您可以说并保存文件以进行转换。


5
要验证这是否实际上是问题所在,请执行cat -v /etc/inti.d/testsam。如果回车错误,它将显示为^M
珍妮·D

感谢您的快速帮助!我已经通过wget命令收到了文件,它的确是一个基于Windows的文件。
Sam Vanhoutte,2014年

在某些服务器上,我可以使用,dos2unix但是当主机不允许该命令擦除所有实例时该怎么办^M
user33777

1
解决该问题的另一种方法:sed -i -e 's/\r//g' /path/file
Al Belsky 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.