如果脚本执行的时候报“找不到文件或目录”,但有没有提示任何文件或名录名称,比如:
$ ./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