IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    bash的一般性诊断

    hongjiang发表于 2015-03-03 07:13:18
    love 0

    如果脚本执行的时候报“找不到文件或目录”,但有没有提示任何文件或名录名称,比如:

    $ ./service.sh
    : No such file or directory
    

    这种情况下,很可能是脚本里的特殊字符引起的,可以通过开启bash的debug选项来查看,为了输出行号可以设置PS4环境变量:

    $ export PS4='+{$LINENO:${FUNCNAME[0]}} ' && bash -x service.sh
    set: usage: set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
    +{3:} $'\r'
    : command not found
    +{23:} $'\r'
    : command not found:
    ...
    

    可以看到提示在底3行和23行出现了windows下的换行符\r导致脚本没能正确识别。通过cat -A可以看到行尾的windows换行符^M$

    解决方法:

    $ sed -i 's/\r//g' service.sh
    


沪ICP备19023445号-2号
友情链接