SH文件从Window拷贝到Linux运行失败

1.问题现象

  bash: ./startup.sh:/bin/bash^M:解释器错误: 没有那个文件或目录

  这个错误通常发生在尝试在Unix-like系统中执行脚本时,脚本文件的行尾结束符是Windows风格的CRLF(回车+换行,即\r\n),而不是Unix风格的LF(换行,即\n)。/bin/bash^M说明了这个问题,^M是字符\r的控制台输出表示,即回车符。

2.解决办法

  使用dos2unix工具将脚本文件的行尾结束符从CRLF转换为LF:  dos2unix startup.sh,dos2unix shutdown.sh,

  如果没有dos2unix,可以使用sed命令进行转换:        sed -i 's/\r//' startup.sh,sed -i 's/\r//' shutdown.sh

  如果不想安装额外工具,可以使用vim编辑器进行转换  

vim startup.sh
:set fileformat=unix
:wq

  或者使用sed直接在命令行中执行转换:  

sed -i 's/\r//' startup.sh

  如果脚本是在Windows下编写的,考虑在Windows下转换为Unix风格再移动到Unix系统。
  转换行尾结束符后,脚本应该可以在Unix-like系统中正常执行

 

  其它sh文件按照上述办法进行处理。

posted @ 2024-03-23 18:52  李文学  阅读(100)  评论(0编辑  收藏  举报