问题标签 [shellcheck]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
345 浏览

shell - 使用 ShellCheck 对 shell 脚本进行静态代码分析 - 预定义规则

我正在尝试使用 Shellcheck 对 shell 脚本进行静态代码分析。我想知道用于执行分析的规则。我在哪里可以买到它们?

下面是我为简单的 helloworld 程序得到的示例输出:

0 投票
2 回答
99 浏览

bash - 重写 bash 命令以符合 ShellCheck

如何重写以下 bash 命令以符合ShellCheck

它目前抱怨:

  • 没用的猫。考虑'cmd <文件| ..' 或 'cmd 文件 | ..'
  • 这个 { 是字面的。
0 投票
1 回答
399 浏览

bash - 如何在传递 ShellCheck 时通过环境变量将 glob 传递给 shell 脚本

假设我有一个 shell 脚本,test.sh它应该回显一些值。我希望能够通过具有全局扩展的环境变量传递这些值:

简单,你说!写吧

确实,这行得通。但它没有通过ShellCheck,这要求我们使用隐式通配/扩展(SC2086)。(这是公平的;在原始代码中, echo 行是cp $FOO $BAR,我们确实不想扩展$BAR;这个错误会捕获错误。)

因此,为了使这一点更加明确,我希望以下内容可能会起作用:

但没有:我们最终得到SC2206

有没有一种规范的方式来做这种事情,这属于 ShellCheck 作者认为的最佳实践?(请随意使用 www.shellcheck.net 上的在线检查器进行测试。)这完全是错误的方法吗?ShellCheck 作者似乎不太可能从未想过这个用例......

0 投票
1 回答
778 浏览

bash - ShellCheck 警告:“删除周围的 $() 以避免执行输出。[SC2091]”

我的脚本中有以下一组命令:

ShellCheck 在 scp 行 (3) 上给我警告:

删除周围的 $() 以避免执行输出。[SC2091]

该脚本有效。我确实想执行输出。我应该忽略这个警告还是应该以不同的方式编写 scp 行?

0 投票
2 回答
4908 浏览

bash - ShellCheck 警告:“迭代 ls 输出很脆弱。使用 glob。[SC2045]”

我在下面的代码中的第二行收到 ShellCheck 警告 [SC2045]。是否可以忽略它,因为我在尝试最后一个之前确保目录不为空ls

更新: 阅读帖子评论后。我已将行更改为:

这已删除警告。

0 投票
1 回答
733 浏览

bash - 无法弄清楚如何解决 shellcheck 投诉,即在从另一个脚本启动一个脚本时我不应该使用 glob 作为命令

示例脚本:

Shellcheck 返回以下内容:

根据https://github.com/koalaman/shellcheck/wiki/SC2211,这条规则应该没有例外。

具体来说,它建议“如果您想通过 glob 指定命令名称,例如在 ./myprogram-*/foo 中不硬编码版本,请先扩展为数组或参数以允许处理 0 或 2+ 匹配的情况。”

我首先使用 glob 的原因是我将日期附加或更改到我刚刚创建或更改的任何脚本。有趣的是,当我使用“bash script2*.sh”而不是“./script2*.sh”时,抱怨就消失了。

我是否解决了这个问题,或者我在欺骗 shellcheck 忽略一个不应该被忽略的问题?如果我使用错误的 bash 语法,我如何执行另一个需要以正确方式使用 glob 的脚本?

0 投票
0 回答
242 浏览

eclipse - 在 Eclipse 问题视图中解析 Shellcheck 输出

我正在从事一个涉及大量 Bash 的混合语言集成项目。我们使用 Eclipse 作为我们的 IDE,因为它与我们的 SCM(不是 Git)紧密集成。

我已经成功配置了一个构建器来针对 bash 代码运行 shellcheck,并且输出在运行时进入控制台视图。Shellcheck 可以输出多种样式,包括 checkstyle xml 和 gcc,但我希望 Eclipse 将输出重新吸回并用它做一些聪明的事情 - 突出显示问题行,允许我单击错误并跳转到相关行等等

我找不到 Eclipse 的 shellcheck 插件,但我想知道是否可以通过一个中间插件将 shellcheck 与 Eclipse 集成,该插件利用 shellchecks 输出 gcc 或 checkstyle 格式消息的能力。有没有人遇到过可以做到这一点的插件?

我遇到过诸如标记等术语,但我没有开始编写自己的 Eclipse 插件的经验(除非有人可以向我指出一个全面的、评论良好的示例插件)......

0 投票
2 回答
238 浏览

bash - GNU Parallel 与多个文件的 shellcheck

如何使用 GNU Parallel 在所有带有包装函数的 *.sh 上运行 shellcheck?

此尝试具有正确的目标文件,但 Parallel 似乎与子shell 斗争。

0 投票
2 回答
8850 浏览

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

环境

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

编辑:我使用带有 ShellCheck 插件的Visual Studio Code官方网站)来即时检查错误、警告和提示。


壳牌检查

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

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

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


示例 shell 脚本片段


在哪里:

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

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

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


问题

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

0 投票
1 回答
2072 浏览

bash - Bash 脚本命令和摆脱 shellcheck 错误 SC2181

我有以下 bash 脚本:

和 ShellCheck 实用程序(https://www.shellcheck.net/)给我以下输出:

此警告的链接如下:https ://github.com/koalaman/shellcheck/wiki/SC2181

修改它的最佳方法是什么。该命令实在是太长了,不能放在一行中。我想避免使用 ShellCheck 忽略规则。

我尝试创建一个局部变量并存储命令的输出,但这违反了其他规则。