< OS 有关 > 在 Windows 11 中编辑的 Shell Script 文件带有 Windows 格式的换行符 “显示为 ^M“, 在 Unix/Linux 中剔除的几种方法

原因:

报错: -sh: /opt/bin/bdgo.sh: /bin/bash^M: bad interpreter: No such file or directory

  • 这种情况经常发生在 Windows 系统创建的脚本,放到 UNIX 上运行
  • 在 Windows 和 Unix 系统之间传输文件时没有使用 ASCII 方式
  • 在 Windows 中系统的回车使用 CRLF 样式的换行符,但 UNIX是LF
  • 带有 Windows 换行符的脚本在 Bash 中执行,报错信息中会包含 “^M ”
  • shell 试图将 /bin/bash^M 作为解释器路径,但这个路径不存在
  • 这几天用 VS code 写了几行脚本,传到 Ubuntu 运行报错
  • 推荐 notepad++ 以前一至用它读写脚本
  • 剔除 Shell script 里面的 Windows 换行符即可

解决方法:

例子,剔除 /opt/bin/bdgo.sh 中的 Windows 换行符:

VS code 编辑器

在编辑器的右下:  CRLF 点击可以切换为 LF 

工具 dos2unix:

dos2unix /opt/bin/bdgo.sh

vi 编辑器

vi /opt/bin/bdgo.sh
:set ff=unix
:wq

 sed 命令

sed -i 's/\r$//' /opt/bin/bdgo.sh

awk 命令

awk '{ sub("\r$", ""); print }' /opt/bin/bdgo.sh > /opt/bin/bdgo.sh.tmp && mv /opt/bin/bdgo.sh.tmp /opt/bin/bdgo.sh

结束:

初学 UNIX/LINUX 买过 2 本书(记忆中的),一本是 unix shell 编程 ,一本是 unix/linux 命令大全之类的名字,这是我工作后位数不多的,能看完的书。 书里还是 /bin/sh,bash 在其中一本有提到,大概比世界晚了10年。

那时在商超机房,第一次看到厉害的脚本,是他们盗版来的某国超市的完整系统。后台的界面是运行在 shell 中...  太有意思了。但会 Unix SQLplus 不好找工作,就去改学 CCNA/CCNP MCSE DBA... 学㕑考证。含金量最高的证书:中级厨师,做饭水平越升。

因为 bash 可以用键盘的 向上/向下 找到 .bash_history 中的命令,很方便。也被陆续发布的 Linux/Unix 成为默认 Shell,让 script 的功能加更强大。

shell script 也有它的缺点,比如不同 shell 兼容,数据中能是字符串,I/O 性能杀手等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值