return value of command not displayed in script

5,285

Solution 1

try this.

#!/bin/bash
datetime=`date +%Y.%m.%d`
ret_value=`/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"; echo $?`
echo $ret_value

The issue is that the command you are running doesn't produce an output since you are piping it to a file. Appending the command to echo the last command exit code should give you the result you are seeking.

Solution 2

The line

ret_value= `…`

has a weird behavior. It first executes the command inside the backticks. The output of that command is then split into words, and the first word is used as a command to execute. If there was at least one word, it would be executed as a command (with the other words as parameters), with the environment variable ret_value set to the empty string for the duration of that command only. But since the output of the command in backticks happens to be empty, what happens instead is that the line is an assignment: it sets the shell variable ret_value to the empty string.

You probably meant to write

ret_value=`…`

with no space after the equal sign. That would set ret_value to the output of the command in backticks — that's what backticks mean. Remember that in the shell, spaces are significant, and in particular you can't have spaces inside an assignment.

If you want to get the return value of a command, run that command (with its output going wherever you like), and then read the content of the special variable $?. The $? variable contains the status of the previous command that was executed.

/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"
echo $?

You may want or even need to save $? into another variable, since it will change as soon as one more command has been executed.

/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
Share:
5,285

Related videos on Youtube

user3744406
Author by

user3744406

Updated on September 18, 2022

Comments

  • user3744406
    user3744406 over 1 year

    If I execute the below rsync command in command-line , I am getting the proper return status

    /usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"

    echo $?
    255
    

    The hostname is unreachable , so I am getting a return value of 255

    This is fine for me. But If I put the same command in a bash script , then I am not getting any return value

    #!/bin/bash
    datetime=`date +%Y.%m.%d`
    ret_value= `/usr/bin/rsync -azv -p /home/zaman x11server:/home/zamanr &> rsyncjob/output."$datetime"`
    echo $ret_value
    

    The output of script just shows blank . The $ret_value is not printed.

    What I am missing here to get the return value of the rsync command printed via script.