Another random tip: python virtualenv generates a activate.fish script that you should use instead of the plain activate script.
The only thing I ever used bass for was this edge case where at work the way we login to AWS is using this Okta AWS integration that prints out a list of export commands.
Since fish isn’t compatible with bash export commands, I just run that command result through bass, which automatically converts them to the fish set -x commands.
If I remember right, I think the reason why the bash script my company made didn’t work is that the export commands that were run in bash weren’t propagated to the underlying fish environment. I was using fish to run a script with a separate shell, so it didn’t affect my environment variables.
Or maybe it was because running exec inside a bash script throws you back into fish which then can’t understand the export command.
I could have definitely done my own thing with sed/awk instead, but I suck at those tools and someone else already implemented the functionality in bass.
bass exec aws_okta_thing_that_prints_export_commands_to_stdout
(Off the top of my head, I think it was something like that, could be misremembering! And by this comment you might be able to tell that I’m far from an expert on how everything works.)Shebangs are actually handled by the operating system kernel! I only know this because certain kinds of shebangs work on Linux, but not on other OSes
It basically runs the script in bash, diffs the environment, and applies the environment changes to your outer fish shell. I use it for some internal tools, and previously used it for nvm though I moved from nvm to fnm now which has fish support.
Can you also share what are the most significant problems with posix incompatibility for you? Why is it a problem?
Internally we have a boot strap run book developers/operations to bring up either Windows/WSL or MacOS to a consistent shell env.
#!/usr/bin/env bash
which means the interactive environment is irrelevant. Users of nonstandard shells like fish need to learn a bit of on-the-fly translation if they expect to copy/paste into their terminals, but it isn't too onerous.MacOS has version 3.2.57(1) Ubuntu has version 5.0.17(1)
Apparently Apple cites license concerns as the reason for not upgrading it. Don't know how valid that is.
License on version 3.2.57 is GPLv2 License on version 5.0.17 is GPLv3+
It's simple enough to update if you use homebrew.
`brew install bash`
Add the brew version of bash to the /private/etc/shells and change the shell.