This can be fixed by using: if [ "$filename" = "foo" ]; When using [email protected] variable, you should always quote it or any arguments containing a space will be expanded in IMHO it's better to stick to a consistent method which works in other cases (and can also help with the code readability). –Dan Cornilescu Jun 13 '15 at 15:46 4 Also, just to be clear, command won't test for the location of any arguments to sudo - so it is only sudo - and nothing it invokes - which is relevant command1; then - much more succinct! –jwbensley Jul 10 '15 at 18:50 @pzkpfw it's easy to test, try it out :) Bash treats && and some other syntax as http://gatoisland.com/error-code/bash-last-error-code.php
But because the output is redirected to /dev/null that will always be the empty string. bash exit share|improve this question edited Nov 28 '14 at 6:39 Andy Shulman 84211027 asked Mar 4 '11 at 15:19 jwbensley 2,445103764 add a comment| 11 Answers 11 active oldest votes case $? Notice that we explicitly exit from the script at the end of trap command, otherwise the script will resume from the point that the signal was received.
In this case you'd want the user to not exist and all their files to be removed. Success! david% bash /tmp/shrink-chroot.sh $chroot= david% bash -u /tmp/shrink-chroot.sh /tmp/shrink-chroot.sh: line 3: $1: unbound variable david% Use set -e Every script you write should include set -e at the top. rm -rf $chroot/usr/share/doc If you ran the script above and accidentally forgot to give a parameter, you would have just deleted all of your system documentation rather than making a smaller
If the exit status is anything other than zero, then the program failed in some way. I once had a Unix system administrator who wrote a script for a production system containing the following 2 lines of code: # Example of a really bad idea cd $some_directory The difference between a good program and a poor one is often measured in terms of the program's robustness. Bash Error Code Handling echo "exit status of \"true\" = $?" # 0 !
How to deal with a really persuasive character? If you mean you want the script to terminate as soon as any command fails, then just do set -e at the start of the script. How rich can one single time travelling person actually become? The last command executed in the function or script determines the exit status.
more stack exchange communities company blog Stack Exchange Inbox Reputation and Badges sign up log in tour help Tour Start here for a quick overview of the site Help Center Detailed Bash Error Code 2 Meaning of Guns and ghee Are there any 'smart' ejection seats? share|improve this answer edited Nov 23 '13 at 0:28 answered Oct 16 '11 at 21:50 Keith Thompson 8,13232235 2 Note that the semicolon is important. –Thorbjørn Ravn Andersen Oct 17 In this article, I explain several techniques for writing robust bash scripts.
Thanks :) –jwbensley Mar 26 '11 at 23:12 1 Be advised that while this solution is the simplest, it does not let you perform any cleanup on failure. –Josh J It is also important that your scripts return a meaningful exit status when they finish. Bash Test Return Code What type of sequences are escape sequences starting with "\033]" How would family relationships change if legal system uses collective punishment? Bash Error Code 255 In this case, the last run command is the echo command, which did execute successfully.
On Unix and Linux systems, programs can pass a value to their parent process while terminating. http://gatoisland.com/error-code/bash-print-error-code.php ls | bogus_command # bash: bogus_command: command not found echo $? # 127 ! Be atomic Sometimes you need to update a bunch of files in a directory at once, say you need to rewrite urls form one host to another on your website. How rich can one single time travelling person actually become? Bash Error Code Of Previous Command
should contain the exit status of the previous command, which should be zero for no error. Is it possible to do that without a temporary variable? share|improve this answer edited Sep 6 '13 at 12:20 answered Mar 4 '11 at 15:35 William Pursell 92.4k21151196 Oooo, this seems interesting. http://gatoisland.com/error-code/bash-error-code-127.php It's so standard that I would suggest abandoning (or rethinking) whatever reason you think you have for not wanting to use one; I highly doubt that it's worth the extra complexity
But what happens if the directory named in $some_directory doesn't exist? Bash Error Code 127 Notice also that you don't need to do: command1 if [ $? -ne 0 ]; then You can simply say: if ! To do this make a copy of the data, make the changes in the copy, move the original out of the way and then move the copy back into place.
more stack exchange communities company blog Stack Exchange Inbox Reputation and Badges sign up log in tour help Tour Start here for a quick overview of the site Help Center Detailed By not defining proper exit codes you could be falsely reporting successful executions which can cause issues depending on what the script does. Not the answer you're looking for? Bash Error Code Variable share|improve this answer answered Mar 8 '11 at 23:54 geirha 21.3k84653 add a comment| up vote 9 down vote $?
Checking the exit code will tell you. A possible solution to this is to use IO redirection and bash's noclobber mode, which won't redirect to an existing file. asked 5 years ago viewed 153249 times active 1 month ago Linked 1 How to get nicer error-messages in this bash-script? navigate here An error exit function Since we will be checking for errors often in our programs, it makes sense to write a function that will display error messages.
asked 1 year ago viewed 5673 times active 1 year ago Related 10Bash script to detect the version control system by testing command return status2how to detect if command execute failed This becomes more important as your programs get more complex and you start having scripts launching other scripts, etc. check_exit_status "$?" Arguably, this is "cheating", since it makes a copy of $? Aborting." fi AND and OR lists Finally, we can further simplify our script by using the AND and OR control operators.
Thanks for sharing, and thanks for the above comment. The problem with the script was that it did not check the exit status of the cd command before proceeding with the rm command. The Linux Documentation Project has a pretty good table of reserved exit codes and what they are used for. as bash will never get to the checking code if it isn't zero.
How to check the exit status code Using sed to extract lines in a text file It is about Time ... if output=$(some_command); then printf 'some_command succeded, the output was «%s»\n' "$output" fi http://mywiki.wooledge.org/BashGuide/TestsAndConditionals explains if in more detail. How would family relationships change if legal system uses collective punishment? Similarly, put $1 inside the quotes in the echo command. –Gordon Davisson Mar 4 '11 at 16:01 edited, thanks for the advice ! –krtek Mar 4 '11 at 16:05
up vote 37 down vote For small things that you want to happen if a shell command works, you can use the && construct: rm -rf somedir && trace_output "Removed the Is the empty set homeomorphic to itself? Can I use an HSA as investment vehicle by overcontributing temporarily? How to extrude a face parallel to another?
Does mean=mode imply a symmetric distribution?