页面载入中,请稍后...

点我安装PWA
您已拒绝通知
    广告广告

    【由于CRLF换行符导致脚本执行异常】

    qaq卟言 LinuxBash
    小人奔跑效果开始
    • 起源
    • 前段时间跟网友联线语音遇见的shell脚本问题
    • 我就是跟他说这个脚本,你自己直接复制人家的代码
    • 用记事本保存,然后改后缀名是无法运行的
    • 我还没有开始解释,他复制保存运行报错一气呵成
    • 复现
    • 这里我创建了一个cs.sh的脚本来复现
    • 内容
    • 由于CRLF换行符导致脚本执行异常1.png
    • 报错内容
    • /bin/bash^M:解释器错误: 没有那个文件或目录2.png
    • bash: ./cs.sh:/bin/bash^M:解释器错误: 没有那个文件或目录
    • 报错解决
    • 于是我这个老哥想到了一个好方法,既然解释器错误
    • 那就直接把解释器那一行删除了🙄
    • 测试运行
    • 由于CRLF换行符导致脚本执行异常3.png
    • 由于CRLF换行符导致脚本执行异常4.png
    • 正常运行
    • 我说如果有空格你怎么解决
    • 由于CRLF换行符导致脚本执行异常5.png
    • 由于CRLF换行符导致脚本执行异常6.png
    • $'\r':未找到命令
    • 当然还会出现其他的一些问题
    • 语法错误: 未预期的文件结尾
    • 这个根本治标不治本
    • 所以拿记事本直接保存代码运行可不行
    • 问题详情
    • 操作系统的差异
    • DosWindows平台:使用回车CR和换行LF两个字符来结束一行,回车+换行CR+LF,即\r\n
    • MacLinux平台:只使用换行LF一个字符来结束一行,即\n
    • 其实最早Mac每行结尾是回车CR\r,后mac也使用了unix
    • 由于CRLF换行符导致脚本执行异常7.png
    • 由于CRLF换行符导致脚本执行异常8.png
    • 记事本默认就是CRLF,并且无法修改
    • 由于CRLF换行符导致脚本执行异常9.png
    • 解决方法
    • 现在好多文本工具都提供了转换功能
    • 比如像VS底部也显示行尾,并且可以进行修改
    • 由于CRLF换行符导致脚本执行异常10.png
    • 在设置中搜索
    • files.eol
    • 由于CRLF换行符导致脚本执行异常11.png
    • 由于CRLF换行符导致脚本执行异常12.png
    • vim编辑器
    • : set ff=unix
    • 使用unix换行符
    • 就是转换为unix风格再执行
    • 如果脚本已经写好了再重新保存,但是这样子太麻烦了
    • 那可以直接删除\r,毕竟相对于unix就是多了这玩意
    • sed -i 's/\r//' cs.sh
    • 测试运行
    • 由于CRLF换行符导致脚本执行异常13.png
    • 发现一样可以正常运行😏
    完结

    🔖本文来源:qaq卟言的个人博客网站声明如损害你的权益请联系我们

    ©️版权声明:本文为【qaq卟言】原创文章,写作不易,转载请您添加本文链接,谢谢您的合作!

    📜著作协议:《知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

    ⚠️部分文章图片来自网络,可能存在版权问题。如发现相关争议请联系qaq卟言处理!

    🔗

    广告广告

    随机文章

    我还没有做出来文章评论,评论请前往留言信箱