Capture exit code of exit command












10














I have this in a bash script:



exit 3;

exit_code="$?"

if [[ "$exit_code" != "0" ]]; then
echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}";
exit "$exit_code";
fi


It looks like it will exit right after the exit command, which makes sense.
I was wondering is there some simple command that can provide an exit code without exiting right away?



I was going to guess:



exec exit 3


but it gives an error message: exec: exit: not found
What can I do? :)










share|improve this question




















  • 1




    Yeah exec exit 3 is no bueno, I get "exec: exit: not found"
    – MrCholo
    Dec 9 '18 at 8:34






  • 6




    I don't understand the question. Why not set exit_code=3 and eliminate the exit 3 line altogether?
    – wjandrea
    Dec 9 '18 at 18:25










  • @wjandrea is more a conceptual question than practical
    – MrCholo
    Dec 10 '18 at 1:03






  • 2




    It still makes no sense to me. Why would there be an exit code if you don't actually exit?
    – Barmar
    Dec 10 '18 at 5:09






  • 1




    @Barmar every process has an exit code. Most of the people trying to answer the question are interpreting the question to mean "what can I replace the 'exit 3' with in the script so it sets the $? variable but doesn't exit this script"?
    – icarus
    Dec 10 '18 at 18:32


















10














I have this in a bash script:



exit 3;

exit_code="$?"

if [[ "$exit_code" != "0" ]]; then
echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}";
exit "$exit_code";
fi


It looks like it will exit right after the exit command, which makes sense.
I was wondering is there some simple command that can provide an exit code without exiting right away?



I was going to guess:



exec exit 3


but it gives an error message: exec: exit: not found
What can I do? :)










share|improve this question




















  • 1




    Yeah exec exit 3 is no bueno, I get "exec: exit: not found"
    – MrCholo
    Dec 9 '18 at 8:34






  • 6




    I don't understand the question. Why not set exit_code=3 and eliminate the exit 3 line altogether?
    – wjandrea
    Dec 9 '18 at 18:25










  • @wjandrea is more a conceptual question than practical
    – MrCholo
    Dec 10 '18 at 1:03






  • 2




    It still makes no sense to me. Why would there be an exit code if you don't actually exit?
    – Barmar
    Dec 10 '18 at 5:09






  • 1




    @Barmar every process has an exit code. Most of the people trying to answer the question are interpreting the question to mean "what can I replace the 'exit 3' with in the script so it sets the $? variable but doesn't exit this script"?
    – icarus
    Dec 10 '18 at 18:32
















10












10








10


6





I have this in a bash script:



exit 3;

exit_code="$?"

if [[ "$exit_code" != "0" ]]; then
echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}";
exit "$exit_code";
fi


It looks like it will exit right after the exit command, which makes sense.
I was wondering is there some simple command that can provide an exit code without exiting right away?



I was going to guess:



exec exit 3


but it gives an error message: exec: exit: not found
What can I do? :)










share|improve this question















I have this in a bash script:



exit 3;

exit_code="$?"

if [[ "$exit_code" != "0" ]]; then
echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}";
exit "$exit_code";
fi


It looks like it will exit right after the exit command, which makes sense.
I was wondering is there some simple command that can provide an exit code without exiting right away?



I was going to guess:



exec exit 3


but it gives an error message: exec: exit: not found
What can I do? :)







bash shell-script exec exit exit-code






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 9 '18 at 19:44









G-Man

12.9k93364




12.9k93364










asked Dec 9 '18 at 8:33









MrCholo

1566




1566








  • 1




    Yeah exec exit 3 is no bueno, I get "exec: exit: not found"
    – MrCholo
    Dec 9 '18 at 8:34






  • 6




    I don't understand the question. Why not set exit_code=3 and eliminate the exit 3 line altogether?
    – wjandrea
    Dec 9 '18 at 18:25










  • @wjandrea is more a conceptual question than practical
    – MrCholo
    Dec 10 '18 at 1:03






  • 2




    It still makes no sense to me. Why would there be an exit code if you don't actually exit?
    – Barmar
    Dec 10 '18 at 5:09






  • 1




    @Barmar every process has an exit code. Most of the people trying to answer the question are interpreting the question to mean "what can I replace the 'exit 3' with in the script so it sets the $? variable but doesn't exit this script"?
    – icarus
    Dec 10 '18 at 18:32
















  • 1




    Yeah exec exit 3 is no bueno, I get "exec: exit: not found"
    – MrCholo
    Dec 9 '18 at 8:34






  • 6




    I don't understand the question. Why not set exit_code=3 and eliminate the exit 3 line altogether?
    – wjandrea
    Dec 9 '18 at 18:25










  • @wjandrea is more a conceptual question than practical
    – MrCholo
    Dec 10 '18 at 1:03






  • 2




    It still makes no sense to me. Why would there be an exit code if you don't actually exit?
    – Barmar
    Dec 10 '18 at 5:09






  • 1




    @Barmar every process has an exit code. Most of the people trying to answer the question are interpreting the question to mean "what can I replace the 'exit 3' with in the script so it sets the $? variable but doesn't exit this script"?
    – icarus
    Dec 10 '18 at 18:32










1




1




Yeah exec exit 3 is no bueno, I get "exec: exit: not found"
– MrCholo
Dec 9 '18 at 8:34




Yeah exec exit 3 is no bueno, I get "exec: exit: not found"
– MrCholo
Dec 9 '18 at 8:34




6




6




I don't understand the question. Why not set exit_code=3 and eliminate the exit 3 line altogether?
– wjandrea
Dec 9 '18 at 18:25




I don't understand the question. Why not set exit_code=3 and eliminate the exit 3 line altogether?
– wjandrea
Dec 9 '18 at 18:25












@wjandrea is more a conceptual question than practical
– MrCholo
Dec 10 '18 at 1:03




@wjandrea is more a conceptual question than practical
– MrCholo
Dec 10 '18 at 1:03




2




2




It still makes no sense to me. Why would there be an exit code if you don't actually exit?
– Barmar
Dec 10 '18 at 5:09




It still makes no sense to me. Why would there be an exit code if you don't actually exit?
– Barmar
Dec 10 '18 at 5:09




1




1




@Barmar every process has an exit code. Most of the people trying to answer the question are interpreting the question to mean "what can I replace the 'exit 3' with in the script so it sets the $? variable but doesn't exit this script"?
– icarus
Dec 10 '18 at 18:32






@Barmar every process has an exit code. Most of the people trying to answer the question are interpreting the question to mean "what can I replace the 'exit 3' with in the script so it sets the $? variable but doesn't exit this script"?
– icarus
Dec 10 '18 at 18:32












5 Answers
5






active

oldest

votes


















31














If you have a script that runs some program
and looks at the program's exit status (with $?),
and you want to test that script by doing something
that causes $? to be set to some known value (e.g., 3), just do



(exit 3)


The parentheses create a sub-shell. 
Then the exit command causes that sub-shell
to exit with the specified exit status.






share|improve this answer





















  • Also, for debugging purposes it'd be just as simple to set exit_code="3" for testing
    – Centimane
    Dec 10 '18 at 17:34






  • 1




    Yes, wjandrea pointed that out yesterday.
    – G-Man
    Dec 10 '18 at 20:25





















13














exit is a bash built-in, so you can't exec it. Per bash's manual:




Bash's exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.




Putting all this together, I'd say your only option is to store your desired exit status in a variable and then exit $MY_EXIT_STATUS when appropriate.






share|improve this answer





















  • hmmm what do you think about @G-man's idea?
    – MrCholo
    Dec 9 '18 at 8:52






  • 2




    Maybe I misunderstood what you're trying to accomplish. If you're just trying to set $? (though I'm not really sure why you would), that does seem like a solid answer. If you just want to set it to some unsuccessful value, false is another option.
    – solarshado
    Dec 9 '18 at 9:04



















10














You can write a function that returns the status given as argument, or 255 if none given. (I call it ret as it "returns" its value.)



ret() { return "${1:-255}"; }


and use ret in place of your call to exit. This is avoids the inefficiency of creating the sub-shell in the currently accepted answer.



Some measurements.



time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'


on my machine takes about 3.5 seconds.



 time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'


on my machine takes about 0.051 seconds, 70 times faster. Putting in the default handling still leaves it 60 times faster. Obviously the loop has some overhead. If I change the body of the loop to just be : or true then the time is halved to 0.025, a completely empty loop is invalid syntax. Adding ;: to the loop shows that this minimal command takes 0.007 seconds, so the loop overhead is about 0.018. Subtracting this overhead from the two tests shows that the ret solution is over 100 times faster.



Obviously this is a synthetic measurement, but things add up. If you make everything 100 times slower than they need to be then you end up with slow systems.
0.0






share|improve this answer



















  • 2




    @iBug The extra space is not needed.
    – icarus
    Dec 9 '18 at 13:15










  • Good point about the inefficiency of creating the sub-shell.  I've read that some shells might be smart enough to optimize the fork out in cases like this, but that bash isn't one of them.
    – G-Man
    Dec 9 '18 at 19:38



















4














About exec exit 3... it would try to run an external command called exit, but there isn't one, so you get the error. It has to be an external command instead of one built in to the shell, since exec replaces the shell completely. Which also means that even if you had an external command called exit, exec exit 3 would not return to continue your shell script, since the shell wouldn't be there any more.






share|improve this answer

















  • 1




    I guess you could do exec bash -c "exit 3", but at the moment I can't think of any reason to do that as opposed to just exit 3.
    – David Z
    Dec 9 '18 at 15:45






  • 1




    @DavidZ, in any case, exec'ing or just exit'ing will stop the script, which didn't seem like what the question wanted.
    – ilkkachu
    Dec 9 '18 at 17:16



















3














You can do this with Awk:



awk 'BEGIN{exit 9}'


Or Sed:



sed Q9 /proc/stat





share|improve this answer





















  • ...or with a shell: sh -c 'exit 9'
    – ilkkachu
    Dec 9 '18 at 17:27






  • 1




    @ilkkachu if youre going to do that you might as well do the (exit 9) in the accepted answer
    – Steven Penny
    Dec 9 '18 at 18:44











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
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: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
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%2funix.stackexchange.com%2fquestions%2f486902%2fcapture-exit-code-of-exit-command%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























5 Answers
5






active

oldest

votes








5 Answers
5






active

oldest

votes









active

oldest

votes






active

oldest

votes









31














If you have a script that runs some program
and looks at the program's exit status (with $?),
and you want to test that script by doing something
that causes $? to be set to some known value (e.g., 3), just do



(exit 3)


The parentheses create a sub-shell. 
Then the exit command causes that sub-shell
to exit with the specified exit status.






share|improve this answer





















  • Also, for debugging purposes it'd be just as simple to set exit_code="3" for testing
    – Centimane
    Dec 10 '18 at 17:34






  • 1




    Yes, wjandrea pointed that out yesterday.
    – G-Man
    Dec 10 '18 at 20:25


















31














If you have a script that runs some program
and looks at the program's exit status (with $?),
and you want to test that script by doing something
that causes $? to be set to some known value (e.g., 3), just do



(exit 3)


The parentheses create a sub-shell. 
Then the exit command causes that sub-shell
to exit with the specified exit status.






share|improve this answer





















  • Also, for debugging purposes it'd be just as simple to set exit_code="3" for testing
    – Centimane
    Dec 10 '18 at 17:34






  • 1




    Yes, wjandrea pointed that out yesterday.
    – G-Man
    Dec 10 '18 at 20:25
















31












31








31






If you have a script that runs some program
and looks at the program's exit status (with $?),
and you want to test that script by doing something
that causes $? to be set to some known value (e.g., 3), just do



(exit 3)


The parentheses create a sub-shell. 
Then the exit command causes that sub-shell
to exit with the specified exit status.






share|improve this answer












If you have a script that runs some program
and looks at the program's exit status (with $?),
and you want to test that script by doing something
that causes $? to be set to some known value (e.g., 3), just do



(exit 3)


The parentheses create a sub-shell. 
Then the exit command causes that sub-shell
to exit with the specified exit status.







share|improve this answer












share|improve this answer



share|improve this answer










answered Dec 9 '18 at 8:49









G-Man

12.9k93364




12.9k93364












  • Also, for debugging purposes it'd be just as simple to set exit_code="3" for testing
    – Centimane
    Dec 10 '18 at 17:34






  • 1




    Yes, wjandrea pointed that out yesterday.
    – G-Man
    Dec 10 '18 at 20:25




















  • Also, for debugging purposes it'd be just as simple to set exit_code="3" for testing
    – Centimane
    Dec 10 '18 at 17:34






  • 1




    Yes, wjandrea pointed that out yesterday.
    – G-Man
    Dec 10 '18 at 20:25


















Also, for debugging purposes it'd be just as simple to set exit_code="3" for testing
– Centimane
Dec 10 '18 at 17:34




Also, for debugging purposes it'd be just as simple to set exit_code="3" for testing
– Centimane
Dec 10 '18 at 17:34




1




1




Yes, wjandrea pointed that out yesterday.
– G-Man
Dec 10 '18 at 20:25






Yes, wjandrea pointed that out yesterday.
– G-Man
Dec 10 '18 at 20:25















13














exit is a bash built-in, so you can't exec it. Per bash's manual:




Bash's exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.




Putting all this together, I'd say your only option is to store your desired exit status in a variable and then exit $MY_EXIT_STATUS when appropriate.






share|improve this answer





















  • hmmm what do you think about @G-man's idea?
    – MrCholo
    Dec 9 '18 at 8:52






  • 2




    Maybe I misunderstood what you're trying to accomplish. If you're just trying to set $? (though I'm not really sure why you would), that does seem like a solid answer. If you just want to set it to some unsuccessful value, false is another option.
    – solarshado
    Dec 9 '18 at 9:04
















13














exit is a bash built-in, so you can't exec it. Per bash's manual:




Bash's exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.




Putting all this together, I'd say your only option is to store your desired exit status in a variable and then exit $MY_EXIT_STATUS when appropriate.






share|improve this answer





















  • hmmm what do you think about @G-man's idea?
    – MrCholo
    Dec 9 '18 at 8:52






  • 2




    Maybe I misunderstood what you're trying to accomplish. If you're just trying to set $? (though I'm not really sure why you would), that does seem like a solid answer. If you just want to set it to some unsuccessful value, false is another option.
    – solarshado
    Dec 9 '18 at 9:04














13












13








13






exit is a bash built-in, so you can't exec it. Per bash's manual:




Bash's exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.




Putting all this together, I'd say your only option is to store your desired exit status in a variable and then exit $MY_EXIT_STATUS when appropriate.






share|improve this answer












exit is a bash built-in, so you can't exec it. Per bash's manual:




Bash's exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.




Putting all this together, I'd say your only option is to store your desired exit status in a variable and then exit $MY_EXIT_STATUS when appropriate.







share|improve this answer












share|improve this answer



share|improve this answer










answered Dec 9 '18 at 8:38









solarshado

26714




26714












  • hmmm what do you think about @G-man's idea?
    – MrCholo
    Dec 9 '18 at 8:52






  • 2




    Maybe I misunderstood what you're trying to accomplish. If you're just trying to set $? (though I'm not really sure why you would), that does seem like a solid answer. If you just want to set it to some unsuccessful value, false is another option.
    – solarshado
    Dec 9 '18 at 9:04


















  • hmmm what do you think about @G-man's idea?
    – MrCholo
    Dec 9 '18 at 8:52






  • 2




    Maybe I misunderstood what you're trying to accomplish. If you're just trying to set $? (though I'm not really sure why you would), that does seem like a solid answer. If you just want to set it to some unsuccessful value, false is another option.
    – solarshado
    Dec 9 '18 at 9:04
















hmmm what do you think about @G-man's idea?
– MrCholo
Dec 9 '18 at 8:52




hmmm what do you think about @G-man's idea?
– MrCholo
Dec 9 '18 at 8:52




2




2




Maybe I misunderstood what you're trying to accomplish. If you're just trying to set $? (though I'm not really sure why you would), that does seem like a solid answer. If you just want to set it to some unsuccessful value, false is another option.
– solarshado
Dec 9 '18 at 9:04




Maybe I misunderstood what you're trying to accomplish. If you're just trying to set $? (though I'm not really sure why you would), that does seem like a solid answer. If you just want to set it to some unsuccessful value, false is another option.
– solarshado
Dec 9 '18 at 9:04











10














You can write a function that returns the status given as argument, or 255 if none given. (I call it ret as it "returns" its value.)



ret() { return "${1:-255}"; }


and use ret in place of your call to exit. This is avoids the inefficiency of creating the sub-shell in the currently accepted answer.



Some measurements.



time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'


on my machine takes about 3.5 seconds.



 time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'


on my machine takes about 0.051 seconds, 70 times faster. Putting in the default handling still leaves it 60 times faster. Obviously the loop has some overhead. If I change the body of the loop to just be : or true then the time is halved to 0.025, a completely empty loop is invalid syntax. Adding ;: to the loop shows that this minimal command takes 0.007 seconds, so the loop overhead is about 0.018. Subtracting this overhead from the two tests shows that the ret solution is over 100 times faster.



Obviously this is a synthetic measurement, but things add up. If you make everything 100 times slower than they need to be then you end up with slow systems.
0.0






share|improve this answer



















  • 2




    @iBug The extra space is not needed.
    – icarus
    Dec 9 '18 at 13:15










  • Good point about the inefficiency of creating the sub-shell.  I've read that some shells might be smart enough to optimize the fork out in cases like this, but that bash isn't one of them.
    – G-Man
    Dec 9 '18 at 19:38
















10














You can write a function that returns the status given as argument, or 255 if none given. (I call it ret as it "returns" its value.)



ret() { return "${1:-255}"; }


and use ret in place of your call to exit. This is avoids the inefficiency of creating the sub-shell in the currently accepted answer.



Some measurements.



time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'


on my machine takes about 3.5 seconds.



 time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'


on my machine takes about 0.051 seconds, 70 times faster. Putting in the default handling still leaves it 60 times faster. Obviously the loop has some overhead. If I change the body of the loop to just be : or true then the time is halved to 0.025, a completely empty loop is invalid syntax. Adding ;: to the loop shows that this minimal command takes 0.007 seconds, so the loop overhead is about 0.018. Subtracting this overhead from the two tests shows that the ret solution is over 100 times faster.



Obviously this is a synthetic measurement, but things add up. If you make everything 100 times slower than they need to be then you end up with slow systems.
0.0






share|improve this answer



















  • 2




    @iBug The extra space is not needed.
    – icarus
    Dec 9 '18 at 13:15










  • Good point about the inefficiency of creating the sub-shell.  I've read that some shells might be smart enough to optimize the fork out in cases like this, but that bash isn't one of them.
    – G-Man
    Dec 9 '18 at 19:38














10












10








10






You can write a function that returns the status given as argument, or 255 if none given. (I call it ret as it "returns" its value.)



ret() { return "${1:-255}"; }


and use ret in place of your call to exit. This is avoids the inefficiency of creating the sub-shell in the currently accepted answer.



Some measurements.



time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'


on my machine takes about 3.5 seconds.



 time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'


on my machine takes about 0.051 seconds, 70 times faster. Putting in the default handling still leaves it 60 times faster. Obviously the loop has some overhead. If I change the body of the loop to just be : or true then the time is halved to 0.025, a completely empty loop is invalid syntax. Adding ;: to the loop shows that this minimal command takes 0.007 seconds, so the loop overhead is about 0.018. Subtracting this overhead from the two tests shows that the ret solution is over 100 times faster.



Obviously this is a synthetic measurement, but things add up. If you make everything 100 times slower than they need to be then you end up with slow systems.
0.0






share|improve this answer














You can write a function that returns the status given as argument, or 255 if none given. (I call it ret as it "returns" its value.)



ret() { return "${1:-255}"; }


and use ret in place of your call to exit. This is avoids the inefficiency of creating the sub-shell in the currently accepted answer.



Some measurements.



time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'


on my machine takes about 3.5 seconds.



 time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'


on my machine takes about 0.051 seconds, 70 times faster. Putting in the default handling still leaves it 60 times faster. Obviously the loop has some overhead. If I change the body of the loop to just be : or true then the time is halved to 0.025, a completely empty loop is invalid syntax. Adding ;: to the loop shows that this minimal command takes 0.007 seconds, so the loop overhead is about 0.018. Subtracting this overhead from the two tests shows that the ret solution is over 100 times faster.



Obviously this is a synthetic measurement, but things add up. If you make everything 100 times slower than they need to be then you end up with slow systems.
0.0







share|improve this answer














share|improve this answer



share|improve this answer








edited Dec 10 '18 at 17:55

























answered Dec 9 '18 at 12:54









icarus

5,6611929




5,6611929








  • 2




    @iBug The extra space is not needed.
    – icarus
    Dec 9 '18 at 13:15










  • Good point about the inefficiency of creating the sub-shell.  I've read that some shells might be smart enough to optimize the fork out in cases like this, but that bash isn't one of them.
    – G-Man
    Dec 9 '18 at 19:38














  • 2




    @iBug The extra space is not needed.
    – icarus
    Dec 9 '18 at 13:15










  • Good point about the inefficiency of creating the sub-shell.  I've read that some shells might be smart enough to optimize the fork out in cases like this, but that bash isn't one of them.
    – G-Man
    Dec 9 '18 at 19:38








2




2




@iBug The extra space is not needed.
– icarus
Dec 9 '18 at 13:15




@iBug The extra space is not needed.
– icarus
Dec 9 '18 at 13:15












Good point about the inefficiency of creating the sub-shell.  I've read that some shells might be smart enough to optimize the fork out in cases like this, but that bash isn't one of them.
– G-Man
Dec 9 '18 at 19:38




Good point about the inefficiency of creating the sub-shell.  I've read that some shells might be smart enough to optimize the fork out in cases like this, but that bash isn't one of them.
– G-Man
Dec 9 '18 at 19:38











4














About exec exit 3... it would try to run an external command called exit, but there isn't one, so you get the error. It has to be an external command instead of one built in to the shell, since exec replaces the shell completely. Which also means that even if you had an external command called exit, exec exit 3 would not return to continue your shell script, since the shell wouldn't be there any more.






share|improve this answer

















  • 1




    I guess you could do exec bash -c "exit 3", but at the moment I can't think of any reason to do that as opposed to just exit 3.
    – David Z
    Dec 9 '18 at 15:45






  • 1




    @DavidZ, in any case, exec'ing or just exit'ing will stop the script, which didn't seem like what the question wanted.
    – ilkkachu
    Dec 9 '18 at 17:16
















4














About exec exit 3... it would try to run an external command called exit, but there isn't one, so you get the error. It has to be an external command instead of one built in to the shell, since exec replaces the shell completely. Which also means that even if you had an external command called exit, exec exit 3 would not return to continue your shell script, since the shell wouldn't be there any more.






share|improve this answer

















  • 1




    I guess you could do exec bash -c "exit 3", but at the moment I can't think of any reason to do that as opposed to just exit 3.
    – David Z
    Dec 9 '18 at 15:45






  • 1




    @DavidZ, in any case, exec'ing or just exit'ing will stop the script, which didn't seem like what the question wanted.
    – ilkkachu
    Dec 9 '18 at 17:16














4












4








4






About exec exit 3... it would try to run an external command called exit, but there isn't one, so you get the error. It has to be an external command instead of one built in to the shell, since exec replaces the shell completely. Which also means that even if you had an external command called exit, exec exit 3 would not return to continue your shell script, since the shell wouldn't be there any more.






share|improve this answer












About exec exit 3... it would try to run an external command called exit, but there isn't one, so you get the error. It has to be an external command instead of one built in to the shell, since exec replaces the shell completely. Which also means that even if you had an external command called exit, exec exit 3 would not return to continue your shell script, since the shell wouldn't be there any more.







share|improve this answer












share|improve this answer



share|improve this answer










answered Dec 9 '18 at 10:50









ilkkachu

55.9k784155




55.9k784155








  • 1




    I guess you could do exec bash -c "exit 3", but at the moment I can't think of any reason to do that as opposed to just exit 3.
    – David Z
    Dec 9 '18 at 15:45






  • 1




    @DavidZ, in any case, exec'ing or just exit'ing will stop the script, which didn't seem like what the question wanted.
    – ilkkachu
    Dec 9 '18 at 17:16














  • 1




    I guess you could do exec bash -c "exit 3", but at the moment I can't think of any reason to do that as opposed to just exit 3.
    – David Z
    Dec 9 '18 at 15:45






  • 1




    @DavidZ, in any case, exec'ing or just exit'ing will stop the script, which didn't seem like what the question wanted.
    – ilkkachu
    Dec 9 '18 at 17:16








1




1




I guess you could do exec bash -c "exit 3", but at the moment I can't think of any reason to do that as opposed to just exit 3.
– David Z
Dec 9 '18 at 15:45




I guess you could do exec bash -c "exit 3", but at the moment I can't think of any reason to do that as opposed to just exit 3.
– David Z
Dec 9 '18 at 15:45




1




1




@DavidZ, in any case, exec'ing or just exit'ing will stop the script, which didn't seem like what the question wanted.
– ilkkachu
Dec 9 '18 at 17:16




@DavidZ, in any case, exec'ing or just exit'ing will stop the script, which didn't seem like what the question wanted.
– ilkkachu
Dec 9 '18 at 17:16











3














You can do this with Awk:



awk 'BEGIN{exit 9}'


Or Sed:



sed Q9 /proc/stat





share|improve this answer





















  • ...or with a shell: sh -c 'exit 9'
    – ilkkachu
    Dec 9 '18 at 17:27






  • 1




    @ilkkachu if youre going to do that you might as well do the (exit 9) in the accepted answer
    – Steven Penny
    Dec 9 '18 at 18:44
















3














You can do this with Awk:



awk 'BEGIN{exit 9}'


Or Sed:



sed Q9 /proc/stat





share|improve this answer





















  • ...or with a shell: sh -c 'exit 9'
    – ilkkachu
    Dec 9 '18 at 17:27






  • 1




    @ilkkachu if youre going to do that you might as well do the (exit 9) in the accepted answer
    – Steven Penny
    Dec 9 '18 at 18:44














3












3








3






You can do this with Awk:



awk 'BEGIN{exit 9}'


Or Sed:



sed Q9 /proc/stat





share|improve this answer












You can do this with Awk:



awk 'BEGIN{exit 9}'


Or Sed:



sed Q9 /proc/stat






share|improve this answer












share|improve this answer



share|improve this answer










answered Dec 9 '18 at 17:07









Steven Penny

1




1












  • ...or with a shell: sh -c 'exit 9'
    – ilkkachu
    Dec 9 '18 at 17:27






  • 1




    @ilkkachu if youre going to do that you might as well do the (exit 9) in the accepted answer
    – Steven Penny
    Dec 9 '18 at 18:44


















  • ...or with a shell: sh -c 'exit 9'
    – ilkkachu
    Dec 9 '18 at 17:27






  • 1




    @ilkkachu if youre going to do that you might as well do the (exit 9) in the accepted answer
    – Steven Penny
    Dec 9 '18 at 18:44
















...or with a shell: sh -c 'exit 9'
– ilkkachu
Dec 9 '18 at 17:27




...or with a shell: sh -c 'exit 9'
– ilkkachu
Dec 9 '18 at 17:27




1




1




@ilkkachu if youre going to do that you might as well do the (exit 9) in the accepted answer
– Steven Penny
Dec 9 '18 at 18:44




@ilkkachu if youre going to do that you might as well do the (exit 9) in the accepted answer
– Steven Penny
Dec 9 '18 at 18:44


















draft saved

draft discarded




















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • 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.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • 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%2funix.stackexchange.com%2fquestions%2f486902%2fcapture-exit-code-of-exit-command%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

Plaza Victoria

Puebla de Zaragoza

Musa