Take the 2-minute tour ×
Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

From time to time, I spot that the folder icon in the titlebar of one of my Terminal windows has a question mark overlaid on it, e.g. this one:

enter image description here

What does this mean? It doesn't seem to have any effect or issues that I've noticed - I'm just curious.

I'm using OS X 10.8 (Mountain Lion).

share|improve this question

1 Answer 1

up vote 7 down vote accepted

The question mark (and disabled popup menu items) indicates that Terminal thinks the working directory is on a remote computer, and therefore you cannot navigate to it in Finder using the popup menu. If you look at the last item in the popup menu (Command-Click on the “proxy” icon) you'll see the computer/host that Terminal thinks the working directory is on. You should find that it is not the computer’s current name.

If you’re using bash (the default shell on OS X), by default it sends a control sequence to the terminal at each prompt to tell Terminal the current working directory. Since control sequences can come from local or remote computers, it sends a “file:” scheme URL including the hostname, and Terminal verifies that the name maps to the current machine. If it doesn’t, Terminal disables the path popup menu items, because they don't correspond to local directories.

You can see the code that sends the control sequence in /etc/bashrc.

[Note that if you’re not using bash, or you’ve customized it so the default behavior doesn’t occur, but your shell (or some other program you’re running) is sending control sequences to set the window or tab (icon) title, Terminal will examine it to see if it contains what looks like a pathname, and then it checks whether that corresponds to a valid local pathname. If not, it doesn’t display the window proxy icon at all.]

A scenario where Terminal can fail to recognize that the “file:” URL is on the current host is if you change your network configuration while a shell is running. A common case is putting a portable computer to sleep and moving to another location, then waking it. The local host name and address will have changed, but the shell’s $HOSTNAME environment variable still has the old host name, and that’s what it sends in the control sequence. To fix this, update the environment variable with:

 export HOSTNAME=`hostname`

Another scenario is where you quit Terminal, change network configurations, then open Terminal with Resume enabled. Terminal will restore the windows and tabs, along with the last working directory URL that each was sent. If you run into this case, $HOSTNAME will be up to date—since it starts a new shell—but Terminal can still have a stale URL until you get the shell to update it again. If displaying the command prompt doesn’t clear up the problem, try changing directories with cd to get the shell to update it.

share|improve this answer
    
Excellent and detailed answer, thank you! –  Andrew Ferrier Jan 15 '13 at 19:20

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.