Трубы в подоболочке. Изменения подоболочки не видны родительской оболочке. На сайте bashfaq / 024 представлены возможные обходные пути.
Вы можете поставить разрыв строки, если |
- последний символ в строке, нет необходимости создавать сверхдлинные строки для конвейеров.
Переменные в верхнем регистре по соглашению зарезервированы для экспортируемых переменных.
cat ... | grep
- бесполезное использование cat.
Just grep ...
или < file grep
.
Когда вы проверяете возвращаемое значение команды, просто if the command; then
вместо the command; if [ $? ...
.
Используйте статус выхода grep
s в if
. В bash просто if <<<"$string" grep -q "pattern"; then
. В оболочке posix do if printf "%s\n" "$string" | grep -q "pattern"; then
.
Bash учитывает пространство. RESULT = "TRUE"
выполняет команду с именем RESULT
с двумя аргументами. Это RESULT="TRUE"
Используйте while IFS= read -r line
, чтобы прочитать всю строку точно.
Итак, пока вы могли:
cat /healthcheck/bin/gaps/result.log |
grep HTTP |
{
while read line
do
echo "$line" | grep "ERROR" >/dev/null
if [ $? -eq 0 ]; then
RESULT="TRUE"
fi
done
echo $RESULT
}
В вашем случае это просто:
if grep "HTTP" /healthcheck/bin/gaps/result.log | grep -q "ERROR"; then
echo TRUE
fi