bash的一般性诊断

如果脚本执行的时候报“找不到文件或目录”,但有没有提示任何文件或名录名称,比如:

$ ./service.sh
: No such file or directory

这种情况下,很可能是脚本里的特殊字符引起的,可以通过开启bash的debug选项来查看,为了输出行号可以设置PS4环境变量:

$ export PS4='+{$LINENO:${FUNCNAME[0]}} ' && bash -x service.sh
set: usage: set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
+{3:} $'\r'
: command not found
+{23:} $'\r'
: command not found:
...

可以看到提示在底3行和23行出现了windows下的换行符\r导致脚本没能正确识别。通过cat -A可以看到行尾的windows换行符^M$

解决方法:

$ sed -i 's/\r//g' service.sh

bash的一般性诊断》上有4条评论

    1. hongjiang 文章作者

      这个命令不一定是每台机器都安装的,很多linux系统默认没有这个命令,sed更普遍一些。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注