Bash - Execute two commands and get exit status 1 if first failsSimultaneously check for empty output and successful exit statusIs the exit status of a command implemented by the command or a shell process which executes the command?Why do I get different exit status for ps | grep in a script?How to get exit status of a background process?How to get exit status of a particular command in a pipeline?Get PID and return code from 1 line bash callLog the output of ssh shell and preserve the exit statusHow to get the exit code of commands started by find?Why exit status of command “ls” is difference between bash and csh shell?Exit status of chained commands
Applicants clearly not having the skills they advertise
When leasing/renting out an owned property, is there a standard ratio between monthly rent and the mortgage?
Did Darth Vader wear the same suit for 20+ years?
How can I add depth to my story or how do I determine if my story already has depth?
Is American Express widely accepted in France?
Unconventional Opposites
Asking bank to reduce APR instead of increasing credit limit
If a problem only occurs randomly once in every N times on average, how many tests do I have to perform to be certain that it's now fixed?
Is it possible to kill all life on Earth?
Concise way to draw this pyramid
Word for a small burst of laughter that can't be held back
Is the decompression of compressed and encrypted data without decryption also theoretically impossible?
NTP rollover-safe design with ESP8266 (Curiosity)
The term for the person/group a political party aligns themselves with to appear concerned about the general public
Chopin: marche funèbre bar 15 impossible place
Humans meet a distant alien species. How do they standardize? - Units of Measure
Is it OK to bring delicacies from hometown as tokens of gratitude for an out-of-town interview?
How can I determine the spell save DC of a monster/NPC?
How to decline physical affection from a child whose parents are pressuring them?
Credit card offering 0.5 miles for every cent rounded up. Too good to be true?
How should I push back against my job assigning "homework"?
Do adult Russians normally hand-write Cyrillic as cursive or as block letters?
Can you please explain this joke: "I'm going bananas is what I tell my bananas before I leave the house"?
What's the most polite way to tell a manager "shut up and let me work"?
Bash - Execute two commands and get exit status 1 if first fails
Simultaneously check for empty output and successful exit statusIs the exit status of a command implemented by the command or a shell process which executes the command?Why do I get different exit status for ps | grep in a script?How to get exit status of a background process?How to get exit status of a particular command in a pipeline?Get PID and return code from 1 line bash callLog the output of ssh shell and preserve the exit statusHow to get the exit code of commands started by find?Why exit status of command “ls” is difference between bash and csh shell?Exit status of chained commands
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
In the case below, the report
command must always be executed but I need to get an exit status 1 if the test
command fails:
test;report
echo $?
0
How can I do it in a single bash line without creating a shell script?
bash exit-status
add a comment |
In the case below, the report
command must always be executed but I need to get an exit status 1 if the test
command fails:
test;report
echo $?
0
How can I do it in a single bash line without creating a shell script?
bash exit-status
add a comment |
In the case below, the report
command must always be executed but I need to get an exit status 1 if the test
command fails:
test;report
echo $?
0
How can I do it in a single bash line without creating a shell script?
bash exit-status
In the case below, the report
command must always be executed but I need to get an exit status 1 if the test
command fails:
test;report
echo $?
0
How can I do it in a single bash line without creating a shell script?
bash exit-status
bash exit-status
edited May 17 at 20:23
Jeff Schaller♦
46k1165150
46k1165150
asked May 17 at 19:54
EduardoEduardo
1242
1242
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
Save and reuse $?
.
test; ret=$?; report; exit $ret
If you have multiple test commands and you want to run them all, but keep track of whether one has failed, you can use bash's ERR trap.
failures=0
trap 'failures=$((failures+1))' ERR
test1
test2
if ((failures == 0)); then
echo "Success"
else
echo "$failures failures"
exit 1
fi
add a comment |
What is a shell script except a file containing shell commands? You could pretend it's not a shell script and put it on one line with something like:
(test; r=$?; report; [ "$r" -gt 0 ] && exit 1; exit 0)
This exits the subshell with a 1
if the first command returned anything other than 0
; otherwise, it returns 0
.
For examples -- I'm just echoing something in lieu of running a real program:
$ (false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
1
$ (true; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
0
$ # example with an exit-status of 2:
$ (grep foo bar; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
grep: bar: No such file or directory
report
$ echo $?
1
If you regularly set the errexit
shell option, you'd want to add in an override so that the subshell doesn't exit prematurely:
(set +o errexit; false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
add a comment |
You said "exit status 1 if the test
command fails". Assuming you intended to make that distinction (i.e., you want the exit value to be 1 even if the test
command exits with, say, 2, or 3, or whatever), then this is a decent solution:
test && report; true; || report; false;
If you did not really mean "1", but whatever non-zero that test
exited with would be OK as your overall exit code, then the current top answer (save and reuse $?) works fine.
add a comment |
A really bad idea, but this seems to work, for some inspiration:
(trap report exit; test)
add a comment |
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
);
);
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%2funix.stackexchange.com%2fquestions%2f519567%2fbash-execute-two-commands-and-get-exit-status-1-if-first-fails%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
Save and reuse $?
.
test; ret=$?; report; exit $ret
If you have multiple test commands and you want to run them all, but keep track of whether one has failed, you can use bash's ERR trap.
failures=0
trap 'failures=$((failures+1))' ERR
test1
test2
if ((failures == 0)); then
echo "Success"
else
echo "$failures failures"
exit 1
fi
add a comment |
Save and reuse $?
.
test; ret=$?; report; exit $ret
If you have multiple test commands and you want to run them all, but keep track of whether one has failed, you can use bash's ERR trap.
failures=0
trap 'failures=$((failures+1))' ERR
test1
test2
if ((failures == 0)); then
echo "Success"
else
echo "$failures failures"
exit 1
fi
add a comment |
Save and reuse $?
.
test; ret=$?; report; exit $ret
If you have multiple test commands and you want to run them all, but keep track of whether one has failed, you can use bash's ERR trap.
failures=0
trap 'failures=$((failures+1))' ERR
test1
test2
if ((failures == 0)); then
echo "Success"
else
echo "$failures failures"
exit 1
fi
Save and reuse $?
.
test; ret=$?; report; exit $ret
If you have multiple test commands and you want to run them all, but keep track of whether one has failed, you can use bash's ERR trap.
failures=0
trap 'failures=$((failures+1))' ERR
test1
test2
if ((failures == 0)); then
echo "Success"
else
echo "$failures failures"
exit 1
fi
answered May 17 at 20:17
GillesGilles
556k13411421651
556k13411421651
add a comment |
add a comment |
What is a shell script except a file containing shell commands? You could pretend it's not a shell script and put it on one line with something like:
(test; r=$?; report; [ "$r" -gt 0 ] && exit 1; exit 0)
This exits the subshell with a 1
if the first command returned anything other than 0
; otherwise, it returns 0
.
For examples -- I'm just echoing something in lieu of running a real program:
$ (false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
1
$ (true; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
0
$ # example with an exit-status of 2:
$ (grep foo bar; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
grep: bar: No such file or directory
report
$ echo $?
1
If you regularly set the errexit
shell option, you'd want to add in an override so that the subshell doesn't exit prematurely:
(set +o errexit; false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
add a comment |
What is a shell script except a file containing shell commands? You could pretend it's not a shell script and put it on one line with something like:
(test; r=$?; report; [ "$r" -gt 0 ] && exit 1; exit 0)
This exits the subshell with a 1
if the first command returned anything other than 0
; otherwise, it returns 0
.
For examples -- I'm just echoing something in lieu of running a real program:
$ (false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
1
$ (true; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
0
$ # example with an exit-status of 2:
$ (grep foo bar; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
grep: bar: No such file or directory
report
$ echo $?
1
If you regularly set the errexit
shell option, you'd want to add in an override so that the subshell doesn't exit prematurely:
(set +o errexit; false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
add a comment |
What is a shell script except a file containing shell commands? You could pretend it's not a shell script and put it on one line with something like:
(test; r=$?; report; [ "$r" -gt 0 ] && exit 1; exit 0)
This exits the subshell with a 1
if the first command returned anything other than 0
; otherwise, it returns 0
.
For examples -- I'm just echoing something in lieu of running a real program:
$ (false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
1
$ (true; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
0
$ # example with an exit-status of 2:
$ (grep foo bar; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
grep: bar: No such file or directory
report
$ echo $?
1
If you regularly set the errexit
shell option, you'd want to add in an override so that the subshell doesn't exit prematurely:
(set +o errexit; false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
What is a shell script except a file containing shell commands? You could pretend it's not a shell script and put it on one line with something like:
(test; r=$?; report; [ "$r" -gt 0 ] && exit 1; exit 0)
This exits the subshell with a 1
if the first command returned anything other than 0
; otherwise, it returns 0
.
For examples -- I'm just echoing something in lieu of running a real program:
$ (false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
1
$ (true; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
report
$ echo $?
0
$ # example with an exit-status of 2:
$ (grep foo bar; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
grep: bar: No such file or directory
report
$ echo $?
1
If you regularly set the errexit
shell option, you'd want to add in an override so that the subshell doesn't exit prematurely:
(set +o errexit; false; r=$?; echo report; [ "$r" -gt 0 ] && exit 1; exit 0)
answered May 17 at 20:16
Jeff Schaller♦Jeff Schaller
46k1165150
46k1165150
add a comment |
add a comment |
You said "exit status 1 if the test
command fails". Assuming you intended to make that distinction (i.e., you want the exit value to be 1 even if the test
command exits with, say, 2, or 3, or whatever), then this is a decent solution:
test && report; true; || report; false;
If you did not really mean "1", but whatever non-zero that test
exited with would be OK as your overall exit code, then the current top answer (save and reuse $?) works fine.
add a comment |
You said "exit status 1 if the test
command fails". Assuming you intended to make that distinction (i.e., you want the exit value to be 1 even if the test
command exits with, say, 2, or 3, or whatever), then this is a decent solution:
test && report; true; || report; false;
If you did not really mean "1", but whatever non-zero that test
exited with would be OK as your overall exit code, then the current top answer (save and reuse $?) works fine.
add a comment |
You said "exit status 1 if the test
command fails". Assuming you intended to make that distinction (i.e., you want the exit value to be 1 even if the test
command exits with, say, 2, or 3, or whatever), then this is a decent solution:
test && report; true; || report; false;
If you did not really mean "1", but whatever non-zero that test
exited with would be OK as your overall exit code, then the current top answer (save and reuse $?) works fine.
You said "exit status 1 if the test
command fails". Assuming you intended to make that distinction (i.e., you want the exit value to be 1 even if the test
command exits with, say, 2, or 3, or whatever), then this is a decent solution:
test && report; true; || report; false;
If you did not really mean "1", but whatever non-zero that test
exited with would be OK as your overall exit code, then the current top answer (save and reuse $?) works fine.
answered May 18 at 5:55
sitaramsitaram
613
613
add a comment |
add a comment |
A really bad idea, but this seems to work, for some inspiration:
(trap report exit; test)
add a comment |
A really bad idea, but this seems to work, for some inspiration:
(trap report exit; test)
add a comment |
A really bad idea, but this seems to work, for some inspiration:
(trap report exit; test)
A really bad idea, but this seems to work, for some inspiration:
(trap report exit; test)
answered May 18 at 17:30
user23013user23013
642414
642414
add a comment |
add a comment |
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.
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%2funix.stackexchange.com%2fquestions%2f519567%2fbash-execute-two-commands-and-get-exit-status-1-if-first-fails%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