代码之家  ›  专栏  ›  技术社区  ›  user5047085

无法源bash脚本-意外的文件结尾

  •  0
  • user5047085  · 技术社区  · 8 年前

    我有一个bash脚本:

    #!/usr/bin/env bash
    
    
    function onqltrap {
      echo "process with pid $$ was trapped.";
       fle=$(echo "$(pwd)" | tr "/" _);
       rm -f fle;
    }
    
    function qltrap {
       trap onqltrap EXIT;
    }
    
    function qlstart {
      set -e;
      trap onqltrap EXIT;
      mkdir -p "$HOME/.quicklock/locks"
      fle=$(echo "$(pwd)" | tr "/" _)
      mkdir "$HOME/${fle}.lock" || { echo "quicklock could not acquire lock."; exit 1 }
    }
    
    function qlstartold {
       mkdir -p "$HOME/.quicklock/fifo"
       rm "$HOME/.quicklock/fifo/$$.fifo"
       mkfifo "$HOME/.quicklock/fifo/$$.fifo"
    }
    

    在脚本中获取此文件的源代码时,出现以下错误:

    猛击: /用户/alexamil/WebstormProjects/oresoftware/quicklock/quicklock陷阱。上海: 第28行:语法错误:意外的文件结尾

    有人知道为什么会发生这种错误吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   rici    8 年前

    使用有用的 http://shellcheck.net 如中强烈建议的 总结,我发现:

    Line 19:
      mkdir "$HOME/${fle}.lock" || { echo "quicklock could not acquire lock."; exit 1 }
    >>                                                                                ^-- SC1083: This } is literal. Check expression (missing ;/\n?) or quote it.
    

    (向右滚动查看错误。)

    在原始输出中,SC1083链接到 https://github.com/koalaman/shellcheck/wiki/SC1083 其中包含有关错误的更多信息。从报道中可能不清楚的是 } 被视为文字参数意味着它不被视为函数定义的结尾;当到达脚本文件的末尾时,该函数仍处于打开状态。

    推荐文章