如何抑制不相关的ShellCheck消息?

kqqjbcuj  于 2023-02-24  发布在  Shell
关注(0)|答案(2)|浏览(166)

环境

系统:Linux Mint 19(基于Ubuntu 18.04)。
编辑:我使用带有ShellCheck插件的Visual Studio Codeofficial website)来动态检查错误、警告和提示。

髋臼杯检查

是每个shell脚本编写者的必备工具。
尽管开发人员必须付出巨大的努力来使它尽可能好,但它有时会产生不相关的警告和/或信息。
示例代码,带有此类消息(警告SC2120+直接相邻的信息SC2119):

shell脚本片段示例

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正如其名所言,它或多或少是不言自明的。
  • 如果传递了任何参数,我希望函数/脚本打印错误消息并退出。

问题

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

vyu0f0g1

vyu0f0g11#

做这件事之前要想清楚!

只有当你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

注意,前面的#是禁用指令不可分割的一部分!

13z8s7eq

13z8s7eq2#

使用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

相关问题