Você só pode retornar um inteiro entre 0 e 255 de uma função do shell. Essa é a mesma restrição que se aplica a um executável. Diferentes shells reagem diferentemente se você passar um argumento não numérico; o bash imprime uma mensagem de erro.
$ bash -c 'f () { return true; }; f; echo $?'
bash: line 0: return: true: numeric argument required
2
Passe 0 para verdadeiro e qualquer valor de 1 a 125 para falso, igual a quando sair de um programa. Os valores de 126 a 255 também são falsos, mas eles têm um significado convencional (incapaz de iniciar um programa ou programa morto por um sinal).
function is_log_started()
{
if test -f "log/server.log"; then
return 0
fi
return 1
}
Mas esta é uma maneira complexa de escrever
function is_log_started
{
test -f "log/server.log"
}
O status de retorno de uma função de shell é o status de retorno da última instrução executada.
Seu teste também está errado. [ is_log_started = true ]
testa se is_log_started
e true
são a mesma cadeia. Para testar se o status de retorno de uma chamada de função é true, basta chamar a função. Cada comando do shell já é um booleano: true se o comando retornar 0, caso contrário, false.
function is_log_started
{
test -f "log/server.log"
}
if is_log_started; then
echo "log started"
fi