问题标签 [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 回答
100 浏览

bash - Bash 脚本使用 ssh 和日期在远程系统上设置坐标世界时

我有一个尝试在另一台机器上同步时间的 bash 脚本。这不是我的源代码,但是当我重构 bash 脚本时,我试图让它通过 ShellCheck。

它的源代码如下所示:

d=$(date -u +%m%d%H%M%Y.%S) ssh decs@host-zc1 "sudo date -u ${d}"

ShellCheck警告为SC2029,并指出“请注意,未转义,这将在客户端扩展。” 事实上,我不想逃避这一点。

是否有另一种方法可以消除此警告并执行此步骤?

0 投票
1 回答
2243 浏览

bash - 在bash中拆分列表

我有这个脚本:

当我运行它时,这是输出:

正是我想要的。但是,shellcheck讨厌这一点并引发错误:

但是,当我双引号变量时,脚本的输出变为:

不是我想要的。

shellcheck 是否正确,我是否应该修改尝试从变量中提取项目的方式,但是如何修改?还是我应该告诉shellcheck忽略这个?

0 投票
1 回答
1430 浏览

bash - 使用位置变量时是否可以解决 SC2001(“看看是否可以使用 ${variable//search/replace}”)?

我正在寻找一个单行来用变量替换替换变量字符串中变量位置的任何字符。我想出了这个工作解决方案:

一个示例用法:

不幸的是,当我使用包含我当前解决方案的脚本运行 shellcheck 时,它告诉我:

我想使用它所建议的参数扩展而不是管道到 sed,但我不清楚使用位置变量时的正确格式。官方文档似乎根本没有讨论字符串中的定位。

这可能吗?

0 投票
3 回答
631 浏览

arrays - 如何移植使用“${@:2}”?

允许变量赋值中的 ${@:2} 语法时,他们说我不应该使用"${@:2}"它,因为它会破坏不同外壳的东西,我应该使用它"${*:2}"

但是使用"${*:2}"代替"${@:2}"是无意义的,因为做"${@:2}"不等于"${*:2}"下面的例子

-->

如果我不能使用"${@:2}"如他们所说),我可以使用什么等价物?

这是原始问题处理除第一个参数以外的所有参数(在 bash 脚本中),他们将参数与空格保持在一起的唯一答案是使用"${@:2}"

0 投票
3 回答
449 浏览

bash - 如何在使用查找时列出没有绝对路径的目录中的所有文件及其文件大小

GNU bash,版本 4.4.0
Ubuntu 16.04

我想列出目录中的所有文件并将它们打印到第二列,同时在第一列中打印文件的大小。例子

我已经使用该ls命令完成了此操作,但 shellcheck 不喜欢它。例子:

当我使用该find命令时,它还返回绝对路径。例子:

实现我的目标最有效的方法是什么。它可以是任何命令,只要 shellcheck 很酷,我很高兴。

0 投票
2 回答
49 浏览

bash - 使用“while read”时,如何正确格式化传递给远程服务器的“if”语句?

Ubuntu 18
重击 4.4.0

我想通过一个 if 语句来查看目录是否存在。如果是这样,我想要一些命令,然后是一个文件。我已经阅读了类似的帖子,但 shellcheck 抱怨我的格式。

脚本:

Shellcheck 投诉:

我很感激你的想法。

0 投票
2 回答
12553 浏览

bash - 当源文件表示脚本顶部的变量时,为什么 shellcheck 会失败?

Ubuntu 16.04
重击 4.3.48

shellcheck当源文件代表脚本顶部的 $variables时,为什么会失败?

这是一个简单的脚本:

这是我的源文件:

以下是来自的回复shellcheck

有没有办法让shellcheck知道$variables在源文件中?


这是我为在 Ubuntu 16.04 上完成这项工作所做的工作

@Dash-o 解释了以下过程:

首先,在源文件声明上方的行中添加source 指令,如下所示:
# shellcheck source=/path/to/sourcefile

接下来,在脚本之前shellcheck使用-x选项执行,如下所示:
shellcheck -x start.sh

当使用-x选项时,shellcheck将遵循源指令下面直接声明的源文件。当我执行命令时,我收到以下错误:

@Bayou 提到我的操作系统需要更新版本的shellcheck. 我检查了我的 Ubuntu 16.04 安装。我的服务器有shellcheck0.3.7,这是 Ubuntu 16.04 必须提供的最新版本,所以我从shellcheck开发人员那里获取了最新的二进制文件并安装了它。

我运行了命令shellcheck -x start.sh,我收到了零错误。

然后我被迫shellcheck给我一些错误。我添加cat $myVariable到脚本的末尾。

我测试了我的理论并shellcheck遵循了我的源文件并给了我预期的错误。

然后我在shellcheck没有-x选项的情况下执行,令我惊讶的是,我收到了以下错误:

所以shellcheck更新到最新版本并且没有-x选项,也会给你一个错误,说明你在命令行上错过了-x选项。所以我决定在我的 start.sh中注释掉sourcefile 指令

现在看看怎么shellcheck

哇哦?因此,我的简单脚本似乎确实不需要sourcefile 指令,或者 shellcheck 仍然看到sourcefile 指令被数字符号注释掉,因为数字符号已经启动了sourcefile 指令?因此,我完全删除了sourcefile 指令,并注释掉了最后一行引用了未在源文件中分配的myVariable变量。

现在看看什么shellcheck报告:

-x选项没有错误。现在要检查在 Ubuntu 16.04 上具有最新版本的简单 shell 脚本的顶部是否不需要sourcefile 指令,我在没有-x选项的情况下执行。shellcheckshellcheck

因此,简而言之,如果shellcheck没有关注您的源文件,请 shellcheck从开发人员的 github 更新 - ( https://github.com/koalaman/shellcheck ) 并通过使用-x选项 通知shellcheck有一个源文件,如下所示:

我希望这对某人有所帮助,因为这个网站每天都对我有所帮助!

0 投票
0 回答
288 浏览

bash - sonarcloud 上的 shellcheck(插件)

我使用ShellCheck来验证我的 bash 脚本。

我有一个用 bash 制作的项目,我想在 SonarCloud 中使用 ShellCheck 对其进行扫描。

当我使用 SonarCloud für 分析时,它显示The main branch has no lines of code..

目前,我通过 CI 自动调用ShellCheck,但我希望在 SonarCloud 上获得结果。

我知道SonarQube (自托管)有sonar-shellcheck-plugin 但可以在SonarCloud上使用它吗?

如果是这样,这怎么可能?

0 投票
1 回答
711 浏览

bash - 使用`env`命令和通过文件传递环境变量的最佳方式

我们目前有一个命令,用于仅为以下参数/命令设置环境。环境变量由文件设置,通过一个简单的cat命令:

但是,shellcheck似乎将此标记为“引用此内容以防止分词。shellcheck(SC2046)”。

处理此错误的最佳方法是什么,因为我不确定是否通过简单地忽略这种特殊情况来正确?据我所知,有多种路线可供选择(使用xargs,遵循“无用猫”的原则等)。

示例环境文件:

更新

我希望社区就如何编写此类.env文件以及如何读取这些文件达成共识。与我们在命令之前内联的情况相比,文件和解释器不应该做更多的魔术。

0 投票
1 回答
499 浏览

arrays - Bash Mapfile 或在 grep 文件内容时读取

只是在寻找其他任何可能更好的方法来执行以下操作。外壳检查正在调用“SC2002 无用的猫”,而我试图缓解的所有其他方式都失败了。它按预期工作,所以我倾向于不理会它 - 除非有任何其他想法。

工作正常,但命中 SC2002 无用猫。所以,我试图明显:

不高兴 - 导致“找不到命令 grep”

现在,我可以简单地将文件逐行读取到带有 mapfile 的数组中,但我不能只 grep 出我需要的行 - 我也可以对 read 做同样的事情,这可能更好,但是有同样的grep问题。

那么有什么想法吗?在这种情况下我可以忽略 SC2002 吗?