If I'd need to install another tool to take my scripts with me, I'll probably would just use another scripting language like Python.
If I'd need to install another tool to take my scripts with me, I'll probably would just use another scripting language like Python.
Whereas Murex colours pipelines with type annotations so that it can perform it's magic with your existing system's coreutils.
That's not to say that Nushell's approach is wrong. It's a popular approach used by a few alt shells, including PowerShell. But it does come with trade offs:
1. your coreutil muscle memory needs to remember whether you're in Nushell or Zsh (eg `ls` flags will differ depending on your shell)
2. the developers of Nushell need to re-implement coreutils to expose the genius of their shell. And as we've seen on here before, developing and maintaining coreutils is far from a trivial task
3. any other CLI tools that people might use that might not be common might also not support Nushells magic
These problems doesn't exist for Murex because it is basically an abstraction on top of POSIX.
To be clear though, I'm not making a criticism about Nushell. Murex has it's own problems and trade offs as well. So please take this comment only as a description of where our approaches have differed (I think it is great that there are numerous options these days).
This just sounds like a non-starter for me. I'm already irritated by having to deal with both BSD and AT&T flavors.
But, to each their own.
https://murex.rocks/docs/tour.html#filesystem-wildcards-glob...
But I do think being able to work with your systems coreutils is a valuable convenience too.
> the developers of Nushell need to re-implement coreutils to expose the genius of their shell.
Yes, or if Nushell is going to try not to be interoperable with existing POSIX commands, then the project needs to focus much more on perfecting the design of its exposed library of builtins.
It seems to me like tools like bash, lmorg, nushell, and PowerShell exist in some kind of continuum (which I think is, from left to right as I've indicated them above, the amount of "smarts"/type information objects returned from commands have). Perhaps not coincidentally, the further right you go, the more what you have starts looking like a programming environment than a shell to execute other programs.
I have written a bunch of scripts that basically manages my whole home server using podman by leveraging `podman --output=json`. Most new tools support json output that make it easy, and by adding an alias that adds the `--output=json | from json` (or the equivalent for each command) it works pretty much the way you would expect.
For others that don't, you just need to add a little parsing to kick it off. Here are some examples on their github[0]. Once you have what works, just add it as an internal command, and it's a "fixed" problem.
I personally prefer nushell's method, as it allowed me to add tools that do some more advanced stuff pretty quickly.
I don't have Windows to test Windows `netcat` on but the Murex code would look something like this:
netstat -ao -p tcp -b | [Proto..]r | tabulate --separator " +" | [Proto "Local Address" "Foreign Address" State PID]
# [Proto..]r -> select every line after the regexp expression "Proto"
# tabulate --separator " +" -> by default columns are split on whitespace. But here we are saying use two or more spaces
# [Proto "Local Address" "Foreign Address" State PID] -> selects columns (we already have column titles from `netstat` so why reinvent the wheel?)
Likewise with your `podman` examples, in murex this would look like: function podman {
cast json
exec podman --output=json @PARAMS
}
You can even configure Murex REPL to only autocomplete commands that support JSON input from `podman`: method define podman %{ Stdout: json }
...so now when you type `podman | <tab>` you only see commands that are compatible with JSON.I do have a lot of respect for Nushell but I've been using Murex as my primary shell for longer than Nushell has been around so a lot of these edge cases have been solved in Murex too. I just don't do a particularly great job at advertising it :)
I do script with bash, however.
find . -name 'somefile'
should have been just find 'somefile'
Ie, defaulting to the current dir and default to find via name.find | grep somefile
because I can also use all the pattern syntax I use elsewhere in grep commands.
One of the reasons I use zsh is because of all the plugins that exist for it. With them I have the feeling that they boost my productivity. But the real reason is, zsh feels more like it does what I want/expect compared to bash (, that is probably subjective?).