Today I’ve started to setup my MacBook Pro for work. It’s my first Mac and I’m not amused.
If you only know Linux, there are some pitfalls.
My .bashrc
script contains the following lines:
#
# ~/.bashrc
#
# Fish
if [[ $(ps --no-header --pid=$PPID --format=cmd) != "fish" ]]
then
exec fish
fi
I use bash
as my login shell, but fish
as my main interactive shell. Fish is not POSIX-compliant which can lead to problems.
This will allow Bash to properly source
/etc/profile
and all files in/etc/profile.d
. Because fish replaces the Bash process, exiting fish will also exit the terminal. Compared to the following options, this is the most universal solution, since it works both on a local machine and on a SSH server.
The command starts a shell inside bash
, but drops into fish
. When you use the fish
shell, but want to bail out to bash
, you can type bash
into the prompt.
Unfortunately, the command relies on the GNU implementation of ps --no-headers
. MacOs ships with the BSD variant of ps
.
Workaround:
if [[ $(ps -p $PPID -o command | tail -n +2) != "fish" ]]
then
exec fish
fi
Now we use the -o
option:
-o
Display information associated with the space or comma sepa-
rated list of keywords specified. Multiple keywords may also
be given in the form of more than one -o option. Keywords may
be appended with an equals (`=’) sign and a string. This
causes the printed header to use the specified string instead
of the standard header. If all keywords have empty header
texts, no header line is written.