I've been looking through some of the .bashrc and .profile scripts that come with various Linux distros and am seeing that sometimes they check $-
.
Here's one in Ubuntu
case $- in
*i*) ;;
*) return;;
esac
In this case it's checking for the "i" flag is present to see if the current shell is an interactive one.
My current session gives me this :
# echo $-
himBH
What are the other flags/options mean? Is there a comprehensive list somewhere?
$? $0 is one of the most used bash parameters and used to get the exit status of the most recently executed command in the foreground. By using this you can check whether your bash script is completed successfully or not.
In Linux and Unix based systems environment variables are a set of dynamic named values, stored within the system that are used by applications launched in shells or subshells. In simple words, an environment variable is a variable with a name and an associated value.
In Bash, environment variables define many different things : your default editor, your current username or the current timezone. Most importantly, environment variables can be used in Bash scripts in order to modify the behaviour of your scripts.
Only uppercase letters, lowercase letters, and underscores from this character set are allowed.
From man bash:
-
Expands to the current option flags as specified upon invocation, by the set builtin command, or those set by the shell itself (such as the -i option).
So these are the current options that control the behavior of the shell. In particular:
h
: Cache location of binaries in the $PATH
. Speeds up execution, but fails if you move binaries around during the shell session.i
: The current shell is interactivem
: Job control is enabledB
: Brace expansion is enabledH
: History substitution like !-1
They mean various things. Each letter corresponds to an option being set for bash. eg, "i" means that the shell is interactive (so the code sample you gave is a test to see if it's an interactive shell or not).
A full list is available in the bash man page. Look for "set" - here's the first line:
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With