Calling script from script

2019-05-22 13:48发布

问题:

How can I have my shell script echo to me that the script that it calls has failed?

#!/bin/sh

test="/Applications/test.sh"

sh $test

exit 0
exit 1

回答1:

I usually take the following approach:

#!/usr/bin/env bash

test="/Applications/test.sh"
sh "${test}"
exit_status=$?
if [[ ${exit_status} ]] ; then
    echo "Error: ${test} failed with status ${exit_status}." >&2
else
    echo "Success!"
fi


回答2:

#!/bin/sh

if sh /Applications/test.sh; then
    echo "Well done $USER"
    exit 0
else
    echo "script failed with code [$?]" >&2
    exit 1
fi

The /Applications/test.sh script should be well coded to exit with conventional status. 0 if it's ok and > 0 if it fails.

Like you can see, no need to test the special variable $?, we use boolean expression directly.



回答3:

In terms of best practice, you should not. If a script fails, it should emit an error message before it terminates so that its parent doesn't have to. The main reason for this is that the process knows why it is failing, while the parent can only guess. In other words, you should just write:

#!/bin/sh

test="/Applications/test.sh"

sh $test

Although really, it would be more typical to just write:

#!/bin/sh
/Applications/test.sh

test.sh will emit the necessary error message, and your script will return the same value as did test.sh. Also, in its current form your script will always be successful, even if test.sh actually failed because exit 0; exit 1 is pretty pointless: the exit 1 will never be called.



标签: shell