How to output the excit code after the function finished
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
add a comment |
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
There's no real reason to useexit
instead ofreturn
; 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
add a comment |
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
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
function sh exit-code
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 useexit
instead ofreturn
; 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
add a comment |
There's no real reason to useexit
instead ofreturn
; 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
add a comment |
1 Answer
1
active
oldest
votes
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.)
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.)
add a comment |
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.)
add a comment |
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.)
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.)
answered Nov 20 '18 at 21:02
chepnerchepner
248k33235330
248k33235330
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
There's no real reason to use
exit
instead ofreturn
; 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