Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

If I examine my bash shell in an OS X (10.6.4) terminal, such as by typing echo $0, there is a dash in front of my shell, like this: -bash. What does this dash mean?

share|improve this question
up vote 4 down vote accepted

It means that bash is invoked as a login shell.


man bash says:

A login shell is one whose first character of argument zero is a -, or one started with the --login option.

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.


You'll find login -pf in your ps output, which starts a login shell by default.

Try running login -pf and login -pfl and see the difference. man login describes the difference:

-l Tells the program executed by login that this is not a login session (by convention, a login session is signalled to the program with a hyphen as the first character of argv[0]; this option disables that), and prevents it from chdir(2)ing to the user's home directory. The default is to add the hyphen (this is a login session).

share|improve this answer
    
Great answer, thanks for the explanation and man cites – marshall.ward May 4 '11 at 6:24
    
I am using ubuntu, and I see different behaviors of echo $0: if I type echo $0 in the terminal invoked by ctrl + alt + f1, the result is -bash; but if I type it in termianl invoked by ctrl + alt + t, result is bash(no leading dash). Could you explain why? – Frozen Flame Mar 12 '14 at 11:09
    
@frozen-flame One is a login shell, the other isn't. Note that OS X Terminal and Linux terminals have different behavior in that regard. – Daniel Beck Mar 12 '14 at 12:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .