Reputation: 1637
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?
Upvotes: 14
Views: 2889
Reputation: 287755
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
Upvotes: 23
Reputation: 7981
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 ...]
Upvotes: 1