O problema é ; ||
em
LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ; || cat $log_file
O ;
encerra a invocação de awk
e o próximo comando começa com ||
, que é um erro de sintaxe.
O que você deseja fazer é verificar se y
não é 1 ao final da análise do arquivo de log e, nesse caso, awk
retornará um status de saída diferente de zero:
LAST_LOG="$last_log" awk '
index($0, ENVIRON["LAST_LOG"]) { y = 1; next }
y { print }
END { exit !y }' <"$log_file" || cat <"$log_file"
Sem o exit
explícito, você só obterá um status de saída diferente de zero em awk
se algum tipo de erro ocorrer.