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...]] [-u] [-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 /bin/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 ... < COLORFGBG=0;15 < COMMAND_MODE=legacy --- > COMMAND_MODE=unix2003 < TERM_PROGRAM=iTerm.app --- > TERM_PROGRAM=Apple_Terminal > TERM_PROGRAM_VERSION=273.1 ...
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
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….