如何抑制不相关的 ShellCheck 消息?
How to suppress irrelevant ShellCheck messages?
环境
系统:Linux Mint 19(基于Ubuntu 18.04)。
编辑:我使用 Visual Studio Code (official website) 和 ShellCheck 插件来即时检查错误、警告和提示。
ShellCheck
是每个shell编剧的必备工具。
尽管开发人员一定付出了巨大的努力使其达到最佳状态,但它有时会产生不相关的警告和/或信息。
示例代码,带有此类消息(警告 SC2120 + directly adjacent information 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
顾名思义,不言自明。
如果传递了任何参数,我希望函数/脚本打印错误消息并退出。
问题
如何禁用这些消息(仅限本地)?
三思而后行!
仅当您 100.0% 肯定消息确实无关紧要时才执行此操作。然后,阅读有关此主题的 Wiki here and here。
一旦您确信消息无关紧要
虽然一般来说,实现这个目标的方法有很多,我说过要在本地禁用那些消息,所以实际上只有一种。
在实际消息出现之前添加以下行:
# 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
使用 Shellcheck 0.7.1 及更高版本,您可以通过过滤严重性(有效选项为:错误、警告、信息、样式)来抑制命令行中不相关的消息:
$ shellcheck --severity=error my_script.sh
这只会显示错误,并会抑制恼人的 SC2034
、SC2086
等警告和样式建议。
您还可以使用 .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
环境
系统:Linux Mint 19(基于Ubuntu 18.04)。
编辑:我使用 Visual Studio Code (official website) 和 ShellCheck 插件来即时检查错误、警告和提示。
ShellCheck
是每个shell编剧的必备工具。
尽管开发人员一定付出了巨大的努力使其达到最佳状态,但它有时会产生不相关的警告和/或信息。
示例代码,带有此类消息(警告 SC2120 + directly adjacent information 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
顾名思义,不言自明。如果传递了任何参数,我希望函数/脚本打印错误消息并退出。
问题
如何禁用这些消息(仅限本地)?
三思而后行!
仅当您 100.0% 肯定消息确实无关紧要时才执行此操作。然后,阅读有关此主题的 Wiki here and here。
一旦您确信消息无关紧要
虽然一般来说,实现这个目标的方法有很多,我说过要在本地禁用那些消息,所以实际上只有一种。
在实际消息出现之前添加以下行:
# 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
使用 Shellcheck 0.7.1 及更高版本,您可以通过过滤严重性(有效选项为:错误、警告、信息、样式)来抑制命令行中不相关的消息:
$ shellcheck --severity=error my_script.sh
这只会显示错误,并会抑制恼人的 SC2034
、SC2086
等警告和样式建议。
您还可以使用 .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