Mac OS X Terminal Compatibility Settings

I start using iTerm rather than Terminal to work on the command line. In my opinion it is much more powerful to setup some window groups. Several tabs and/or windows can be stored and managed as bookmarks. The manipulation of window and tab title seams also a bit easier. But that is not the topic of this post 🙂

When working on the command line I also use TVDBasenv. Starting a new session always display the status of environment / databases.

Last login: Tue Apr 26 22:17:55 on ttys014

Down/dummy   : rdbms1020 rdbms1020IC

Listener     : Down

user@host:~/ [rdbms1020IC]

Unfortunately in iTerm this does not work in the same way as in Terminal.

Last login: Tue Apr 26 21:52:17 on ttys010
ps: illegal option -- f
usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
[-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
ps [-L]

Down/dummy   : rdbms1020 rdbms1020IC

Listener     : Down

user@host:~/ [rdbms1020IC]

I first thought that the two Application are using a different PATH and therefore a different ps. But all the following test have shown the same output on both environments.

user@host:~/ [rdbms1020IC] which ps

user@host:~/ [rdbms1020IC] type -a ps
ps is /bin/ps

The comparison of the environment variables finally showed a few differences.

diff iterm.txt terminal.txt
> COMMAND_MODE=unix2003
> TERM_PROGRAM=Apple_Terminal

It seams that COMMAND_MODE does the trick. In iTerm it is set to legacy while Terminal is using unix2003. So setting COMMAND_MODE to legacy cause utility programs like ps to behave as closely to Mac OS X 10.3’s utility programs, while setting it to unix2003 causes utility programs to obey the Version 3 of the Single UNIX Specification (SUSv3).

To fix my issue I simply have to add COMMAND_MODE=unix2003 to my .bash_profile.

More information on manipulating the compatibility settings can be found in
man 5 compat

One thought on “Mac OS X Terminal Compatibility Settings

  1. Andy Lawrence

    You just restored my sanity ! I just converted from iTerm to iTerm2, and found that some of my nice alias commands didn’t work. I checked I was in the same shell, logged in with the same switches. One specific issue I stripped down to find that a simple ‘ps -u’ worked in iTerm but bombed in iTerm2 (and in Terminal). I was completely mystified, because surely they are both just dumb terminals running a simple unix command ? But I just checked and indeed iTerm login has COMMAND_MODE=legacy and iterm2 has COMMAND_MODE=unix2003….

Comments are closed.