【问题标题】:How to suppress irrelevant ShellCheck messages?如何抑制不相关的 ShellCheck 消息?
【发布时间】:2019-03-10 13:45:02
【问题描述】:

环境

系统:Linux Mint 19(基于 Ubuntu 18.04)。

编辑:我使用 Visual Studio Code (official website) 和 ShellCheck 插件来即时检查错误、警告和提示。


ShellCheck

是每个shell脚本编写者必备的工具。

尽管开发人员必须付出巨大的努力才能使其尽可能好,但有时会产生不相关的警告和/或信息。

示例代码,带有此类消息(警告SC2120 + 直接相邻信息SC2119):


示例 shell 脚本 sn-p

am_i_root ()
# expected arguments: none
{
    # check if no argument has been passed
    [ "$#" -eq 0 ] || print_error_and_exit "am_i_root" "Some arguments have been passed to the function! No arguments expected. Passed: $*"

    # check if the user is root
    # this will return an exit code of the command itself directly
    [ "$(id -u)" -eq 0 ]
}

# check if the user had by any chance run the script with root privileges and if so, quit
am_i_root && print_error_and_exit "am_i_root" "This script should not be run as root! Quitting to shell."

地点:

  • am_i_root 正在检查传递的不需要的参数。它的真正目的是不言自明的。

  • print_error_and_exit 就像它的名字所说的那样,它或多或少是不言自明的。

  • 如果传递了任何参数,我希望函数/脚本打印错误消息并退出。


问题

如何禁用这些消息(仅限本地)?

【问题讨论】:

    标签: linux shell shellcheck


    【解决方案1】:

    在做这件事之前要考虑清楚!

    仅当您 100.0% 肯定该消息确实无关紧要时才执行此操作。然后,阅读有关此主题的 Wiki herehere


    一旦你向自己保证,这些信息就无关紧要了

    虽然一般来说,有更多的方法可以实现这个目标,我说的是在本地禁用这些消息,所以实际上只有一个。

    在实际消息出现之前添加以下行:

    # shellcheck disable=code
    

    值得注意的是,在同一行中添加文本会导致错误,因为它也会被 shellcheck 解释。 如果您想解释为什么要禁止警告,可以添加 another hash # 以防止 shellcheck 解释该行的其余部分。

    不正确:

    # shellcheck disable=code irrelevant because reasons
    

    正确:

    # shellcheck disable=code # code is irrelevant because reasons
    

    注意,可以添加多个用逗号分隔的代码,如下例:

    # shellcheck disable=SC2119,SC2120
    

    【讨论】:

      【解决方案2】:

      使用 Shellcheck 0.7.1 及更高版本,您可以通过过滤严重性来抑制命令行上的不相关消息(有效选项为:错误、警告、信息、样式):

      $ shellcheck --severity=error my_script.sh
      

      这只会显示错误,并会抑制烦人的SC2034SC2086 等警告和样式建议。

      您还可以使用 .shellcheckrc 文件中的指令抑制每个代码的消息,例如:

      disable=SC2076,SC2016
      

      这两个选项都允许您全局过滤消息,而不必使用相同的指令编辑每个源代码文件。

      如果您的发行版没有最新版本,您可以upgrade 使用类似:

      scversion="stable" # or "0.7.1" or "latest"
      wget -qO- "https://github.com/koalaman/shellcheck/releases/download/${scversion?}/shellcheck-${scversion?}.linux.x86_64.tar.xz" | tar -xJv
      sudo cp "shellcheck-${scversion}/shellcheck" /usr/bin/
      shellcheck --version
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多