当前位置: 首页 > news >正文

Windows用Notepad++编辑Shell脚本:一招解决Linux执行报错问题

Windows用Notepad++编辑Shell脚本:一招解决Linux执行报错问题

  • Windows用Notepad++编辑Shell脚本:一招解决Linux执行报错问题
    • 一、报错根源:Windows与Linux的“换行符之争”
    • 二、核心解决步骤:Notepad++设置换行符
      • 步骤1:查看当前文件的换行符格式
      • 步骤2:将换行符转换为Linux格式
      • 步骤3:保存文件(关键!)
    • 三、进阶技巧:设置默认保存为Linux格式(一劳永逸)
    • 四、额外提醒:避免其他“跨系统编辑坑”
      • 1. 编码格式:优先用UTF-8无BOM
      • 2. 避免用Windows自带记事本编辑
    • 五、总结

Windows用Notepad++编辑Shell脚本:一招解决Linux执行报错问题

如果你经常在Windows上用Notepad++编辑Shell脚本,再上传到Linux服务器执行,大概率遇到过这样的报错:$'\r': command not foundsyntax error near unexpected token。明明脚本代码逻辑没问题,却始终无法正常运行,就像下面这样:

  • Shell 源码
#!/bin/bashfunction welcome() {echo "=============="echo "Welcome to Linux Shell"echo "=============="
}welcome
  • 但是,执行报错:
[Ruby@gaussdb01 tmp]$ sh test.sh 
test.sh: line 2: $'\r': command not found
test.sh: line 3: $'\r': command not found
test.sh: line 4: syntax error near unexpected token `$'{\r''
'est.sh: line 4: `function welcome() {
[Ruby@gaussdb01 tmp]$ 

在这里插入图片描述

今天就彻底搞懂这个问题的根源,以及如何在Windows编辑时就提前解决,让Shell脚本从编辑到执行全程顺畅。

一、报错根源:Windows与Linux的“换行符之争”

先明确一个关键差异:不同系统对“换行”的表示方式不同

  • Windows系统:用 CRLF(即 \r\n,回车+换行)作为文件换行符;
  • Linux/Unix系统:只认 LF(即 \n,仅换行)作为换行符。

当你在Windows用Notepad++编辑Shell脚本时,默认会按Windows规则写入 CRLF 换行符。但把脚本上传到Linux后,Linux无法识别多余的 \r(回车符),会把它当成无效字符处理:

  • 多余的 \r 会被解析为 $'\r',导致报错“$'\r': command not found”;
  • 函数定义(如 function welcome() {)末尾的 \r 会破坏语法结构,引发“syntax error near unexpected token”。

简单说:不是你的脚本代码错了,是换行符格式不兼容。只要在Windows编辑时,把换行符改成Linux兼容的格式,问题就能解决。

二、核心解决步骤:Notepad++设置换行符

Notepad++自带“换行符格式转换”功能,操作简单,分两步即可完成。

步骤1:查看当前文件的换行符格式

打开脚本文件后,先确认当前的换行符类型——Notepad++底部状态栏会直接显示:

  • 若显示 Windows (CR LF):表示当前是Windows格式(这就是导致报错的“元凶”);
  • 若显示 Unix (LF):表示是Linux兼容格式(无需修改,可直接上传)。

比如你编辑的 test.sh 脚本,底部显示 Windows (CR LF),就说明需要转换格式。

步骤2:将换行符转换为Linux格式

  1. 点击Notepad++顶部菜单栏的 「编辑(Edit)」
  2. 在下拉菜单中找到 「文档格式转换(EOL Conversion)」,鼠标悬停会展开子菜单;
  3. 点击子菜单中的 「Unix (LF)」,完成格式转换。

转换后,底部状态栏会从 Windows (CR LF) 变成 Unix (LF),表示所有 CRLF 换行符已替换为 LF

步骤3:保存文件(关键!)

转换格式后,一定要按 Ctrl+S 保存文件——若不保存,格式修改不会生效,上传到Linux后依然会报错。

保存完成后,再把脚本上传到Linux服务器,执行 sh test.sh 就能正常运行,之前的报错会彻底消失。

三、进阶技巧:设置默认保存为Linux格式(一劳永逸)

如果每次编辑Shell脚本都要手动转换格式,难免会忘记。这时可以设置Notepad++的“默认换行符格式”,让新建的文件直接使用 Unix (LF),从根源避免问题。

具体步骤如下:

  1. 打开Notepad++,点击顶部菜单栏的 「设置(Settings)」
  2. 在下拉菜单中选择 「首选项(Preferences)」,弹出设置窗口;
  3. 在左侧列表中找到并点击 「新建」 选项;
  4. 在右侧“格式(Format)”区域,勾选 「Unix (LF)」(默认是“Windows (CR LF)”);
  5. 点击窗口底部的 「关闭」,保存设置。

设置完成后,以后用Notepad++新建的任何文件,都会默认使用Linux兼容的 LF 换行符。编辑Shell脚本时,无需再手动转换格式,直接编写、保存、上传即可正常执行。

四、额外提醒:避免其他“跨系统编辑坑”

除了换行符,Windows编辑Shell脚本还可能遇到其他兼容问题,这里顺便提两个常见场景,帮你全面避坑:

1. 编码格式:优先用UTF-8无BOM

Linux系统默认推荐UTF-8编码,若Notepad++保存的文件带“BOM”(字节顺序标记),可能导致脚本头部出现乱码,甚至执行报错。

设置方法:

  • 「设置」→「首选项」→「新建」→「编码」,选择 「UTF-8(无BOM)」
  • 对已存在的文件,可通过「格式」→「转为UTF-8无BOM编码」进行转换。

2. 避免用Windows自带记事本编辑

很多人会随手用Windows记事本编辑脚本,但记事本不仅默认用 CRLF 换行符,还会强制给UTF-8文件加BOM,且无法修改格式。强烈建议放弃记事本,用Notepad++、VS Code等工具编辑Shell脚本,兼容性更好。

五、总结

Windows编辑Shell脚本后Linux执行报错,本质是“换行符格式不兼容”导致的小问题,解决起来非常简单:

  1. 临时处理:打开文件后,通过「编辑→文档格式转换→Unix (LF)」转换格式,保存后上传;
  2. 永久解决:设置Notepad++默认新建文件为「Unix (LF)」格式,一劳永逸。

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/153047655

http://www.dtcms.com/a/469112.html

相关文章:

  • 自己做网站要不要租服务器软件开发工程师时薪
  • 工业智能科技网站设计做搜狗pc网站软件下载
  • 企业网站制作收费拍卖行 网站建设
  • 网站建设和网站开发的区别域名主机基地
  • 宁波营销型网站建设首选肥东县建设局网站
  • 工商营业执照网上申报关键词优化报价
  • 帮人做网站要怎么赚钱吗网页设计软件培训机构
  • seo网站建设费用济南网站建设第六网建
  • 昆山市网站建设产品运营主要做什么
  • 网站建设进无形资产的规定电子商务网站硬件建设的核心
  • 免费的毕业设计网站建设北京移动端网站建设
  • 简易网站模板wordpress菜单创建
  • 哪个网站可以做兼职讲师建设部网站施工员查询
  • wordpress 通用代码seo关键词排行优化教程
  • 好看的知名企业网站制作网页的软件
  • 牛商网专注营销型网站建设加速器怎么加速网页
  • 某公司网站源码电脑版商城网站建设
  • dw和vs做网站哪个好用软件开发培训学费
  • 重庆网站建设velpaiseo优化排名易下拉试验
  • 南京做网站公司地点网站建设银川
  • frontpage可以做网站吗网站主色调有几种
  • 做网站用什么域名比较好烟台规划网站
  • 博客网站是自己做的吗wordpress分类自定义title
  • 做视频的网站socks5免费代理地址
  • 深圳做网站最好的公可以推广的平台
  • 购物网站app开发高端网站建设 aspx
  • 湖南省建设工程造价管理协会网站做问卷调查赚钱的网站
  • 网站范例wordpress如何更改页面链接地址
  • 网站多语言解决方案嘉兴企业网站模板建站
  • 网站建设规划面试技巧佛山刚刚发生的事