O return()
do Bash só pode retornar argumentos numéricos. Em qualquer caso, por padrão, ele retornará o status de saída da última execução do comando. Então, tudo que você realmente precisa é:
#!/usr/bin/env bash
install_auto() {
apt-get -h > /dev/null 2>&1
if [ $? -eq 0 ] ; then
sudo apt-get install --assume-yes $@
fi
}
Você não precisa definir explicitamente um valor a ser retornado, pois, por padrão, uma função retornará $?
. No entanto, isso não funcionará se o primeiro comando apt
falhar e você não entrar no loop if
. Para torná-lo mais robusto, use isto:
#!/usr/bin/env bash
install_auto() {
apt-get -h > /dev/null 2>&1
ret=$?
if [ $ret -eq 0 ] ; then
## If this is executed, the else is ignored and $? will be
## returned. Here, $?will be the exit status of this command
sudo apt-get install --assume-yes $@
else
## Else, return the exit value of the first apt-get
return $ret
fi
}
A regra geral é que, para que uma função retorne o status de saída de um trabalho específico e não necessariamente o último que foi executado, você precisará salvar o status de saída em uma variável e retornar a variável:
function foo() {
run_a_command arg1 arg2 argN
## Save the command's exit status into a variable
return_value= $?
[the rest of the function goes here]
## return the variable
return $return_value
}
EDIT: Na verdade, como @gniourf_gniourf apontado nos comentários, você poderia simplificar bastante a coisa toda usando &&
:
install_auto() {
apt-get -h > /dev/null 2>&1 &&
sudo apt-get install --assume-yes $@
}
O valor de retorno desta função será um dos seguintes:
- Se
apt-get -h
falhar, ele retornará seu código de saída - Se
apt-get -h
for bem-sucedido, ele retornará o código de saída desudo apt-get install
.