O shell é muito exigente sobre a sintaxe e o espaço em branco com a construção { ... } . Essas duas maneiras de configurar essa função funcionariam:
ok() { grep ERROR $filename; }
ok() {
grep ERROR $filename
}
Em relação às chaves { .. } vs. parêntesis ( .. ) , Bash's manual afirma que :
The semicolon (or newline) following list is required.
e
The braces are reserved words, so they must be separated from the list by blanks or other shell metacharacters.
Lista refere-se aos comandos dentro das chaves, e tudo isso se aplica onde sempre { ... } é usado, mas funções são provavelmente o lugar mais comum.
Além disso, se você quiser dar o nome do arquivo como um parâmetro para a função, use $1 dentro dele. ou seja, ok() { grep ERROR "$1"; } pode ser usado como ok test.txt .