I gave it a spin. First it complained about aspell dictionaries, then I tried installing a package in an effort to improve the prompt from simply saying "murex":
murex » murex-package install https://github.com/orefalo/murex-module-starship
\* Getting package from 'https://github.com/orefalo/murex-module-starship'....
Error in `murex-package` (0,1): protocol handler for HTTPS has not yet been written. Please use git in the mean time (you can do this by specifying a git extension in the uri)
.murex_modules » murex-package install https://github.com/orefalo/murex-module-starship.git
\* Getting package from 'https://github.com/orefalo/murex-module-starship.git'....
Cloning into '/home/aroedset/.murex_modules/murex-module-starship'...
Error in `murex-package` (0,1): \* Package 'murex-module-starship': Error loading module `starship` in path `/home/aroedset/.murex_modules/murex-module-starship/starship.mx`:
> \* Missing required executable, builtin or murex function: `starship`
.murex_modules »
And then the time I allocated for myself for trying out a random shell I found on the internet was up.
Murex were the shells whose excretions were used to make the Tyrian purple of the Mediterranean. Tyrian referring to Tyre, one of the major Phoenician city-states.
It was so iconic that the "Punic Wars" are called that because Punic = Phoenicia = "Purple People".
Carthage was the Phoenician colony that outlasted the home country.
Murex also has significant religious significance to Jews. It is the source of the biblically mandated blue threads for four cornered garments: https://en.wikipedia.org/wiki/Tekhelet
Also, the Phoenicians were the descendants of the Canaanites, who (according to one etymological theory) are also named after the color purple.
The Phoenicians were a semitic people like the Jews, and they gave the world its first alphabet which was adopted by both the Hebrews and the Greeks. The Greeks added vowels, and the Romans adopted that alphabet and it became roughly the one we use today.
If you go to the Wiki page (https://en.m.wikipedia.org/wiki/Phoenician_alphabet) and scroll down to the Table of Letters header, you can see how the letters evolved from Egyptian hieroglyphs to the letters we use today. It’s particularly interesting to me that our letter “B” (which the greeks called “beta” and which forms the tail end of “alphabet”) was originally a house, and the semitic languages called it “bēt” which was their word for house, which you can still see today in Biblical place names like Bethel (house of God—“El” was a very old name for God).
It's interesting how, unlike Sumerian cuneiform or Egyptian hieroglyphs that were complex systems that came from dedicated scribes of the court, Phoenicia's alphabet was the kind of pragmatic system you can imagine a more mercantile society developing.
It's wild that it turned into the scripts: Latin, Greek, Arabic, Cyrillic, Hebrew, and beyond.
Also interesting is Chinese script, which was saved from this by Stalin telling Mao that China should keep its unique writing, which Russia of course was already doing. Mao did do the simplification, but he turned away from his previous plan to standardize the latin script for Chinese.
Because I need the scripts and snippets I write for my repos to work for other developers, I'm going to write them to be bash compatible. That applies also to scripts and snippets written by others that I consume.
So if a shell is not bash syntax compatible, then it really has to offer some astonishingly useful features to offset my having to translate and map the scripts I need to run for it.
Murex does not interpret "$(cmd args)". So unfortunately, I cannot use it. I know it's not fair, and I know that is promoting a lock-in of what shells can do, but I need to get shit done I'm afraid.
A thousand times this. I use bash scripting for things I’m going to distribute, but do all my local CLI work and scripting in fish because life’s too short to wear the bash hair shirt when I don’t have to.
For me to develop my scripts it would help alot if my interactive shell supports the syntax as well. I mean you are right of course, I CAN do that, but it then becomes a tradeoff question again of whether this non-compatible interactive shell has sufficient niceties.
I agree with you. Have you tried Fish? I find it to be the perfect balance of these goals. It has lots of niceties, which for me was already enough to switch to it years ago. But lately, they’ve been adding lots of bash compatibility, which has made it even more awesome.
Thanks for pointing it out. I've tried both as interactive shells for a few minutes. Murex seems to have a more minimalist approach that works well as a drop-in replacement.
However, I have trouble understanding some design decision, such as inventing redundant keywords. And I've spotted bugs in boths (e.g. ls --literal fails in nu, and the completion proposes it twice in Murex).
Maybe I’m just not the target audience, but looking at the front page, I don’t see what actual problems this solves. The claims sound nice, but without examples of what they mean in real world use, it’s not really compelling.
I may be wrong, but it gives me some powershell vibe. Since it seems to be targeted for macOS, I would assume it "solves" the lack of powershell equivalent on Mac ?
Powershell 7+ (a long while ago named core) is the version you should use on ALL platforms, including Windows. It's just the most recent version.
"Core" gives off a vibe that it is some limited thingy. It's not, it's full PS.
It takes 3.5 seconds for a new login shell to open on my laptop, which has a decent CPU and a fast SSD. I do have quite a few lines of config, but no oh-my-zsh and almost no plugins. I have around 2k SLOC of ZSH config.
Meanwhile, I have 22.3k SLOC of Emacs Lisp config, and Emacs starts up (granted, after lowering bytecode to native code AOT) in ~4 seconds. To me, that suggests there's something really wrong with ZSH in terms of performance - unfortunately, it's better in almost every other way compared to BASH, so I learned to live with that. Still, at least in my setup, ZSH indeed is slow, even on modern hardware. I wonder if it would even run on a 486...
That sounds way too long. Mine takes like 15 ms on a 2015 cpu and I activate zsh-syntax-highlighting and new style completion and everything, but yeah oh-my-zsh often adds nutso overhead. Anyway, I suggest you profile your zsh start-up. Here's one copy-paste friendly way to do that:
(PS4='+$EPOCHREALTIME ' zsh -licx exit)2>err
era=$(grep '^+[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].[0-9]*' <err |
head -c6) # c6 here rounds to 100_000 seconds (eg +17483xxxyy)
awk '/^\'${era}'[0-9][0-9][0-9][0-9][0-9]\.[0-9]*/{
if (c) printf "%.06f %s\n", $1 - t0, c; t0 = $1; c = $0 }
END { printf "%.06f %s\n", 0, c; }' < err | sort -g > startup-profile
(Note for $EPOCHREALTIME to work you need a `zmodload zsh/datetime` somewhere early on. I might suggest at the top of `$ZDOTDIR/.zshenv` for this kind of thing.)
Also, if something seems limited by "just parsing", you can usually speed that up a lot with `zcompile`. I do that with a `.zcompdump.zwc` and a `digraphs.zsh.zwc`.
EDIT: I noticed myself that really large HISTSIZE (in the 100s of thousands, and with such limit realized) combined with de-duplication seems to be a bad combination. I just lowered my HISTSIZE with a when-too-big spool-off for longer term history/cold storage.
Not sure what you find clunky about PowerShell. On the other hand, I find nushell not mature enough to be usable. The very basics - displaying command output in lists and tables - is totally broken as soon as some long strings appear in the output. Various issues about this are logged, but nobody seems to care.
I gave it a spin. First it complained about aspell dictionaries, then I tried installing a package in an effort to improve the prompt from simply saying "murex":
And then the time I allocated for myself for trying out a random shell I found on the internet was up.Upvote just for good historical reference!
Murex were the shells whose excretions were used to make the Tyrian purple of the Mediterranean. Tyrian referring to Tyre, one of the major Phoenician city-states.
It was so iconic that the "Punic Wars" are called that because Punic = Phoenicia = "Purple People".
Carthage was the Phoenician colony that outlasted the home country.
https://en.wikipedia.org/wiki/Tyrian_purple
Murex also has significant religious significance to Jews. It is the source of the biblically mandated blue threads for four cornered garments: https://en.wikipedia.org/wiki/Tekhelet
It's a one-eyed, one-horned, flying, purple people eater...
Also, the Phoenicians were the descendants of the Canaanites, who (according to one etymological theory) are also named after the color purple.
The Phoenicians were a semitic people like the Jews, and they gave the world its first alphabet which was adopted by both the Hebrews and the Greeks. The Greeks added vowels, and the Romans adopted that alphabet and it became roughly the one we use today.
If you go to the Wiki page (https://en.m.wikipedia.org/wiki/Phoenician_alphabet) and scroll down to the Table of Letters header, you can see how the letters evolved from Egyptian hieroglyphs to the letters we use today. It’s particularly interesting to me that our letter “B” (which the greeks called “beta” and which forms the tail end of “alphabet”) was originally a house, and the semitic languages called it “bēt” which was their word for house, which you can still see today in Biblical place names like Bethel (house of God—“El” was a very old name for God).
Yea, I loooove that history too.
It's interesting how, unlike Sumerian cuneiform or Egyptian hieroglyphs that were complex systems that came from dedicated scribes of the court, Phoenicia's alphabet was the kind of pragmatic system you can imagine a more mercantile society developing.
It's wild that it turned into the scripts: Latin, Greek, Arabic, Cyrillic, Hebrew, and beyond.
Also interesting is Chinese script, which was saved from this by Stalin telling Mao that China should keep its unique writing, which Russia of course was already doing. Mao did do the simplification, but he turned away from his previous plan to standardize the latin script for Chinese.
Because I need the scripts and snippets I write for my repos to work for other developers, I'm going to write them to be bash compatible. That applies also to scripts and snippets written by others that I consume.
So if a shell is not bash syntax compatible, then it really has to offer some astonishingly useful features to offset my having to translate and map the scripts I need to run for it.
Murex does not interpret "$(cmd args)". So unfortunately, I cannot use it. I know it's not fair, and I know that is promoting a lock-in of what shells can do, but I need to get shit done I'm afraid.
You should consider putting a shebang at the top of your scripts instead of leaving it to fate
I do this for all the scripts I write. That does cover one of the scenarios I covered above, which is valid.
Then there’s no reason you can’t use a different shell as your interactive shell, while running your scripts in bash.
A thousand times this. I use bash scripting for things I’m going to distribute, but do all my local CLI work and scripting in fish because life’s too short to wear the bash hair shirt when I don’t have to.
bash: what you feel like doing with your head trying to get work done in it.
For me to develop my scripts it would help alot if my interactive shell supports the syntax as well. I mean you are right of course, I CAN do that, but it then becomes a tradeoff question again of whether this non-compatible interactive shell has sufficient niceties.
I agree with you. Have you tried Fish? I find it to be the perfect balance of these goals. It has lots of niceties, which for me was already enough to switch to it years ago. But lately, they’ve been adding lots of bash compatibility, which has made it even more awesome.
I will check it out, cheers
I just write everything in fish and have an LLM translate it to bash. Freed up a couple brain cells for more useful things for sure.
Newer versions of Fish have significantly improved bash compatibility. The LLM may actually be making things harder for you than they need to be.
The single biggest win there was that it understands ‘export foo=bar’ now, which is probably 90% of what I’d ever copy and paste into a shell.
Could it really be worth it to try to build new shell commands into muscle memory? How long would it take before
err "some message"
becomes normal?
For me, it would have to offer sexual favors or something to be worth it. I don't see anything that good otherwise.
Interesting. Looks similar to nushell [1] which also is data-encoding-aware.
[1] https://www.nushell.sh/
Thanks for pointing it out. I've tried both as interactive shells for a few minutes. Murex seems to have a more minimalist approach that works well as a drop-in replacement.
However, I have trouble understanding some design decision, such as inventing redundant keywords. And I've spotted bugs in boths (e.g. ls --literal fails in nu, and the completion proposes it twice in Murex).
ls --literal does not exist, that's why. Try man.
Maybe I’m just not the target audience, but looking at the front page, I don’t see what actual problems this solves. The claims sound nice, but without examples of what they mean in real world use, it’s not really compelling.
I may be wrong, but it gives me some powershell vibe. Since it seems to be targeted for macOS, I would assume it "solves" the lack of powershell equivalent on Mac ?
On Mac and Linux you can use powershell core:
https://learn.microsoft.com/en-us/powershell/scripting/insta...
Powershell 7+ (a long while ago named core) is the version you should use on ALL platforms, including Windows. It's just the most recent version. "Core" gives off a vibe that it is some limited thingy. It's not, it's full PS.
Oh goody
Agreed.
The nushell homepage, by comparison, immediately conveys the benefits of that project.
Wasn't Murex some sort of backend software for financial institutions?
Still is. It's a French/Lebanese corp based in Paris/Beirut. I worked there for a few years early in my career.
It's a spaceship from Warframe.
NB story spoilers. <https://wiki.warframe.com/w/Murex>
Not just backend - it replaced the front end system I wrote for FX options (after I left the bank)
This looks interesting, I will consider switching if it's not sluggish like zsh was that one day I tried it.
Back in the 486 era? same here hehe ksh for life :p
It takes 3.5 seconds for a new login shell to open on my laptop, which has a decent CPU and a fast SSD. I do have quite a few lines of config, but no oh-my-zsh and almost no plugins. I have around 2k SLOC of ZSH config.
Meanwhile, I have 22.3k SLOC of Emacs Lisp config, and Emacs starts up (granted, after lowering bytecode to native code AOT) in ~4 seconds. To me, that suggests there's something really wrong with ZSH in terms of performance - unfortunately, it's better in almost every other way compared to BASH, so I learned to live with that. Still, at least in my setup, ZSH indeed is slow, even on modern hardware. I wonder if it would even run on a 486...
That sounds way too long. Mine takes like 15 ms on a 2015 cpu and I activate zsh-syntax-highlighting and new style completion and everything, but yeah oh-my-zsh often adds nutso overhead. Anyway, I suggest you profile your zsh start-up. Here's one copy-paste friendly way to do that:
(Note for $EPOCHREALTIME to work you need a `zmodload zsh/datetime` somewhere early on. I might suggest at the top of `$ZDOTDIR/.zshenv` for this kind of thing.)Also, if something seems limited by "just parsing", you can usually speed that up a lot with `zcompile`. I do that with a `.zcompdump.zwc` and a `digraphs.zsh.zwc`.
EDIT: I noticed myself that really large HISTSIZE (in the 100s of thousands, and with such limit realized) combined with de-duplication seems to be a bad combination. I just lowered my HISTSIZE with a when-too-big spool-off for longer term history/cold storage.
A few of those ideas are also in https://www.nushell.sh/
Has anyone spent good time with murex AND nushell and ultimately chose murex?
It looks like PowerShell, or nushell that also looks like PowerShell.
Did you know you can install PowerShell on Linux too?
PowerShell is so much clunkier than nutshell, which is truly a delight. Haven't tried murex.
Not sure what you find clunky about PowerShell. On the other hand, I find nushell not mature enough to be usable. The very basics - displaying command output in lists and tables - is totally broken as soon as some long strings appear in the output. Various issues about this are logged, but nobody seems to care.
https://github.com/nushell/nushell/issues/13601
https://github.com/nushell/nushell/issues/16379
What happened to the convention that shell names end in sh? There are:
options available; surely we haven't exhausted them all?!Balderdash! Sorry to be standoffish, but you must distinguish between dictionaries. My distro has chosen to impoverish me with a nightmarish 315.
(wamerican 2017.08.24-1 from Ubuntu 18.04)
This is instead named for an animal with a shell
faccessat2 was added in Linux 5.8 in August 2020. Maybe it's time for you to upgrade your distro?
[dead]