Переписать команду bash для совместимости с ShellCheck

Как мне переписать следующую команду bash, чтобы она соответствовала ShellCheck?

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

В настоящее время жалуется на:

  • Бесполезный кот. Рассмотрим 'cmd <файл |.. 'или' cmd file |.."
  • Это {буквально.

2 ответа

Решение

Жалобы на проверку

  • С помощью 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)

Нет труб!

Как и следовало ожидать, вы, вероятно, хотите:

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

Однако это прямая интерпретация результатов проверки оболочки, поэтому я не уверен относительно того, о чем вы спрашиваете. В сущности, вы спрашиваете: "Почему это не работает?".

Другие вопросы по тегам