A linha
ret_value= '…'
tem um comportamento estranho. Primeiro executa o comando dentro dos backticks. A saída desse comando é então dividida em palavras, e a primeira palavra é usada como um comando para executar. Se houvesse pelo menos uma palavra, ela seria executada como um comando (com as outras palavras como parâmetros), com a variável de ambiente ret_value
definida como a cadeia vazia somente durante a duração desse comando. Mas como a saída do comando nos backticks está vazia, o que acontece é que a linha é uma atribuição: define a variável do shell ret_value
para a string vazia.
Você provavelmente quis escrever
ret_value='…'
sem espaço após o sinal de igual. Isso configuraria ret_value
para a saída do comando nos backticks - é o que os backticks significam. Lembre-se que no shell, os espaços são significativos e, em particular, você não pode ter espaços dentro de uma atribuição.
Se você deseja obter o valor de retorno de um comando, execute esse comando (com sua saída indo para onde quiser) e, em seguida, leia o conteúdo da variável especial $?
. A variável $?
contém o status do comando anterior que foi executado.
/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"
echo $?
Você pode querer ou até mesmo precisar salvar $?
em outra variável, pois ela será alterada assim que mais um comando for executado.
/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"
ret_value=$?
if [ $ret_value -eq 0 ]; then
echo "Success"
else
echo "Failure, rsync return status $ret_value"
fi
exit $ret_value