How to output the excit code after the function finished












0















If in a shell script. There are two function with loop, and I run both function in the script and put both in the background.



For example:



#!/bin/bash

function a {
for 1 in 2; do
if 3.sh; then
echo 'done'
else
exit 1
fi
done
}

function b {
for a in b; do
if c.sh; then
echo 'done'
else
exit 1
fi
done
}

a &
b &


Now since both functions are in background, once I run the script it will be completed right away. What I expected was to capture the exit code of the script so if anything wrong happened during loop a and b I can become acknowledged.



My another concern is that if anything happened during loop a, the script will be terminated right away (since exit code 1 is given), so b got terminated as well even if it's innocent.










share|improve this question

























  • There's no real reason to use exit instead of return; since the function is the only thing running in the background job, the background process will exit as soon as the function returns.

    – chepner
    Nov 20 '18 at 21:03
















0















If in a shell script. There are two function with loop, and I run both function in the script and put both in the background.



For example:



#!/bin/bash

function a {
for 1 in 2; do
if 3.sh; then
echo 'done'
else
exit 1
fi
done
}

function b {
for a in b; do
if c.sh; then
echo 'done'
else
exit 1
fi
done
}

a &
b &


Now since both functions are in background, once I run the script it will be completed right away. What I expected was to capture the exit code of the script so if anything wrong happened during loop a and b I can become acknowledged.



My another concern is that if anything happened during loop a, the script will be terminated right away (since exit code 1 is given), so b got terminated as well even if it's innocent.










share|improve this question

























  • There's no real reason to use exit instead of return; since the function is the only thing running in the background job, the background process will exit as soon as the function returns.

    – chepner
    Nov 20 '18 at 21:03














0












0








0








If in a shell script. There are two function with loop, and I run both function in the script and put both in the background.



For example:



#!/bin/bash

function a {
for 1 in 2; do
if 3.sh; then
echo 'done'
else
exit 1
fi
done
}

function b {
for a in b; do
if c.sh; then
echo 'done'
else
exit 1
fi
done
}

a &
b &


Now since both functions are in background, once I run the script it will be completed right away. What I expected was to capture the exit code of the script so if anything wrong happened during loop a and b I can become acknowledged.



My another concern is that if anything happened during loop a, the script will be terminated right away (since exit code 1 is given), so b got terminated as well even if it's innocent.










share|improve this question
















If in a shell script. There are two function with loop, and I run both function in the script and put both in the background.



For example:



#!/bin/bash

function a {
for 1 in 2; do
if 3.sh; then
echo 'done'
else
exit 1
fi
done
}

function b {
for a in b; do
if c.sh; then
echo 'done'
else
exit 1
fi
done
}

a &
b &


Now since both functions are in background, once I run the script it will be completed right away. What I expected was to capture the exit code of the script so if anything wrong happened during loop a and b I can become acknowledged.



My another concern is that if anything happened during loop a, the script will be terminated right away (since exit code 1 is given), so b got terminated as well even if it's innocent.







function sh exit-code






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 20 '18 at 22:09









halfer

14.5k758111




14.5k758111










asked Nov 20 '18 at 20:48









BeyondTryingToCodeBeyondTryingToCode

134




134













  • There's no real reason to use exit instead of return; since the function is the only thing running in the background job, the background process will exit as soon as the function returns.

    – chepner
    Nov 20 '18 at 21:03



















  • There's no real reason to use exit instead of return; since the function is the only thing running in the background job, the background process will exit as soon as the function returns.

    – chepner
    Nov 20 '18 at 21:03

















There's no real reason to use exit instead of return; since the function is the only thing running in the background job, the background process will exit as soon as the function returns.

– chepner
Nov 20 '18 at 21:03





There's no real reason to use exit instead of return; since the function is the only thing running in the background job, the background process will exit as soon as the function returns.

– chepner
Nov 20 '18 at 21:03












1 Answer
1






active

oldest

votes


















0














If you wait on a background job, the exit status of wait will be the exit status of the job.



a & a_pid=$!
b & b_pid=$!

wait $a_pid
a_status=$?
wait $b_pid
b_status=$?


You might object that if b finishes before a, then you have to wait to get b's status. That might be a problem, but only if you have anything else to do. Regardless of which job finishes first, the time it takes for both to complete is the same. (If b does finish first, then wait $b_pid will exit immediately once it is run.)






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401280%2fhow-to-output-the-excit-code-after-the-function-finished%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    If you wait on a background job, the exit status of wait will be the exit status of the job.



    a & a_pid=$!
    b & b_pid=$!

    wait $a_pid
    a_status=$?
    wait $b_pid
    b_status=$?


    You might object that if b finishes before a, then you have to wait to get b's status. That might be a problem, but only if you have anything else to do. Regardless of which job finishes first, the time it takes for both to complete is the same. (If b does finish first, then wait $b_pid will exit immediately once it is run.)






    share|improve this answer




























      0














      If you wait on a background job, the exit status of wait will be the exit status of the job.



      a & a_pid=$!
      b & b_pid=$!

      wait $a_pid
      a_status=$?
      wait $b_pid
      b_status=$?


      You might object that if b finishes before a, then you have to wait to get b's status. That might be a problem, but only if you have anything else to do. Regardless of which job finishes first, the time it takes for both to complete is the same. (If b does finish first, then wait $b_pid will exit immediately once it is run.)






      share|improve this answer


























        0












        0








        0







        If you wait on a background job, the exit status of wait will be the exit status of the job.



        a & a_pid=$!
        b & b_pid=$!

        wait $a_pid
        a_status=$?
        wait $b_pid
        b_status=$?


        You might object that if b finishes before a, then you have to wait to get b's status. That might be a problem, but only if you have anything else to do. Regardless of which job finishes first, the time it takes for both to complete is the same. (If b does finish first, then wait $b_pid will exit immediately once it is run.)






        share|improve this answer













        If you wait on a background job, the exit status of wait will be the exit status of the job.



        a & a_pid=$!
        b & b_pid=$!

        wait $a_pid
        a_status=$?
        wait $b_pid
        b_status=$?


        You might object that if b finishes before a, then you have to wait to get b's status. That might be a problem, but only if you have anything else to do. Regardless of which job finishes first, the time it takes for both to complete is the same. (If b does finish first, then wait $b_pid will exit immediately once it is run.)







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 20 '18 at 21:02









        chepnerchepner

        248k33235330




        248k33235330






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53401280%2fhow-to-output-the-excit-code-after-the-function-finished%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

            How to fix TextFormField cause rebuild widget in Flutter