Skip to content

Instantly share code, notes, and snippets.

@voidptr
Last active April 30, 2024 18:48
Show Gist options
  • Save voidptr/d77a5a527ed2cc06cd277df9ec366f32 to your computer and use it in GitHub Desktop.
Save voidptr/d77a5a527ed2cc06cd277df9ec366f32 to your computer and use it in GitHub Desktop.
Execute Fish Shell from Bash at end of .bashrc -- while being able to invoke Bash shell from fish without re-running Fish -- and without having to use --norc
# Many systems, such as Arch, MSys2, Cygwin, etc., need to have Bash interpret
# their startup scripts, set Environment variables, etc. Therefore, setting your
# default shell to anything other than Bash might not be a good idea. In these
# cases, the conventional advice is to append 'exec fish' at the end of your
# .bashrc. However, this approach creates another problem; should you need to
# drop into Bash to run a bash script, you need to be careful to use
# 'bash --norc' every time. Otherwise, Fish will start up again when you don't
# want it to. Obviously, this is cumbersome and inefficient. Thus, instead of
# doing a naked 'exec fish' at the end of your .bashrc, use the following:
## Edited on 4/17/24 with [Ilan's suggestion|https://gist.github.com/voidptr/d77a5a527ed2cc06cd277df9ec366f32?permalink_comment_id=5026742#gistcomment-5026742]
if [[ $(ps --no-header --pid=$PPID --format=comm) != "fish" && -z ${BASH_EXECUTION_STRING} ]]
then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=''
exec fish $LOGIN_OPTION
fi
@ilan-schemoul
Copy link

Do not copy what's above it might break things like for example login to your dekstop. Do what Arch Linux recommends (and in most cases always reads Arch Linux wiki first)

if [[ $(ps --no-header --pid=$PPID --format=comm) != "fish" && -z ${BASH_EXECUTION_STRING} ]]
then
  shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=''
  exec fish $LOGIN_OPTION
fi

@voidptr
Copy link
Author

voidptr commented Apr 17, 2024

Wow, I'd forgotten all about this! Thanks for the comment. I've updated the gist

@ilan-schemoul
Copy link

Haha didn't expect such a quick answer 6 years after :) stuck myself at work because of previous code on my second day so I figured I'd share that 😁

@voidptr
Copy link
Author

voidptr commented Apr 17, 2024

Ouch! Painful! Sorry!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment