2017-08-16 100 views
1

如何将以下bash命令重写为ShellCheck兼容?将bash命令重写为ShellCheck兼容

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

这是目前抱怨:

  • 没用的猫。考虑'cmd <文件| ..'或'cmd文件| ..'
  • 这是{是文字。
+0

我认为你的意思是'无用',而不是'除非'(考虑将来切断并粘贴错误)。我已经编辑它以适应。您是否考虑过使用该工具建议的更改? – Arafangion

回答

5

的shellcheck投诉

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

就像一个猜测,你可能想:

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

然而,这就是shellcheck输出的直接解释,所以我不确定你是问什么。就目前而言,你实质上是在问:“为什么这不起作用?”。

+0

完美。谢谢。 – Justin