Переписать команду 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)
Однако это прямая интерпретация результатов проверки оболочки, поэтому я не уверен относительно того, о чем вы спрашиваете. В сущности, вы спрашиваете: "Почему это не работает?".