解决sh执行报错 $‘\r‘: command not found和 syntax error: unexpected end of file

windows上写的脚本放到linux环境运行,报错了:

For more details see kill(1).
./shell/dev_start.sh: line 3: $‘\r’: command not found
./shell/dev_start.sh: line 41: syntax error: unexpected end of file

原因

与文本文件的格式问题有关,导致Shell脚本中存在不可见的控制字符

方案

方案一:单一文件处理

删除不可见字符:使用文本编辑器(如vimnano)打开你的Shell脚本文件,并删除可能存在的不可见字符。具体来说,这些错误可能是因为Windows格式的行结束符(CR+LF),你可以将其转换为Unix格式(LF)。

使用vim编辑器,可以执行以下命令来进行转换:

:set ff=unix
:wq

这将确保文件以Unix格式保存。

方案二:批量处理

批量删除不可见字符(通常是空白字符或控制字符)可以使用工具如sed来完成。sed是一个用于文本处理的强大工具。以下是一个使用sed批量删除不可见字符的示例:

sed -i 's/[[:cntrl:]]//g' yourfile.txt

上述命令中的[[:cntrl:]]表示匹配控制字符,g表示全局替换。将yourfile.txt替换为你要处理的文件名。

这将在文件中删除所有的控制字符,包括不可见字符。请确保在执行此操作之前备份文件,以防不可预测的结果。

  • 可以用正则匹配达到批量的效果
sed -i 's/[[:cntrl:]]//g' ./*.sh

你可能感兴趣的:(linux,linux)