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

memory=$(cat /proc/meminfo | grep 'MemTotal:' | awk {'print $2}' 2> /dev/null)

目前,它抱怨:

  • 没用的猫。 考虑'cmd <文件| ..”或“ cmd文件| ..'
  • 此{是文字。

#1楼 票数:6 已采纳

Shellcheck投诉是

  • 使用cat filename | grep ' pattern ' cat filename | grep ' pattern '而不是grep ' pattern ' filename
  • awk命令中的第一个大括号位于单引号的外部,因此为文字; 应该是awk '{ command }'

因此,满足shellcheck的版本看起来像

memory=$(grep 'MemTotal:' /proc/meminfo | awk '{print $2}')

我不确定为什么您重定向了标准错误,所以我删除了它。

但是,将grep输出管道传输到awk很少是最佳解决方案。 awk几乎可以执行grep可以做的所有事情,因此您可以进一步简化为

memory=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo)

没有管道!

#2楼 票数:2

只是猜测,您可能想要:

memory=$(grep 'MemTotal:' /proc/meminfo | awk '{print $2}' 2> /dev/null)

但是,那是shellcheck输出的直接解释,所以我不确定您要问什么。 就目前而言,您本质上是在问:“为什么这行不通?”。

  ask by Justin translate from so

未解决问题?本站智能推荐:

1回复

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

假设我有一个shell脚本test.sh ,它应该回显一些值。 我希望能够通过具有glob扩展的环境变量传递这些值: 你说容易! 写吧 事实上,这是有效的。 但它没有通过ShellCheck ,后者通过使用隐式globbing /扩展( SC2086 )来调用我们。 (这
1回复

如何避免 bash 脚本上的 sed 错误?

我需要在最后一行后添加文本,但出现此错误。 如何避免此错误保持相同的操作?
1回复

Bash脚本命令并摆脱Shellcheck错误SC2181

我有以下bash脚本: ShellCheck实用程序( https://www.shellcheck.net/ )给我以下输出: 该警告的链接如下: https : //github.com/koalaman/shellcheck/wiki/SC2181 修改此内容的最佳方
2回复

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

环境 系统:Linux Mint 19(基于Ubuntu 18.04)。 编辑器:我使用带有 ShellCheck 插件的Visual Studio Code (官方网站)来即时检查错误、警告和提示。 壳牌检查 是每个 shell 脚本编写者的必备工具。 尽管开发人员必须付出巨大的努力使其尽
4回复

如何在不导致脚本失败的情况下满足 shellcheck?

我目前正在测试 GitHub Actions,快速入门解释了如何将超级 linter 添加到 repo,这是在整个 repo 中应用 linting 的一种简单方法 - 我喜欢这个想法,所以我已将它添加到我的 repo 中,其中一个 linter它适用于 shellcheck,它在我的一个 shel
2回复

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

Ubuntu 16.04 重击 4.3.48 为什么当源文件表示脚本顶部的$variables时, shellcheck会失败? 这是一个简单的脚本: 这是我的源文件: 以下是shellcheck的回复: 有没有办法让shellcheck知道$variables在源文件中? 这
2回复

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

我在以下代码的第二行收到ShellCheck警告[SC2045]。 在我尝试最后一次ls之前确保目录不为空时可以忽略它吗? 更新:阅读帖子评论后。 我将行更改为: 这已删除警告。
1回复

在bash中拆分列表

我有这个脚本: 当我运行它时,输出为: 这正是我想要的。 但是, shellcheck讨厌这一点并抛出错误: 但是,当我双引号变量时,脚本的输出将更改为: 这不是我想要的。 shellcheck是正确的,我应该修改尝试从变量中提取项目的方式,但是如何?