- cross-posted to:
- commandline@programming.dev
- hackernews@derp.foo
- cross-posted to:
- commandline@programming.dev
- hackernews@derp.foo
There is a discussion on Hacker News, but feel free to comment here as well.
As someone who regularly uses nu, I can say from experience that it is the most pleasant shell experience I’ve had in a long time. I always felt like the concepts Powershell brought were powerful and useful, but that the language itself was lacking.
nu
seems to have both the data types that made Powershell so powerful, and the brevity that makes bash so convenient to use. The tab completions and consistent format for command documentation are also really nice, and it feels more like a modern scripting language (with a functional twist) than a weird, ugly shell language.The only reason I wouldn’t recommend
nu
to people is because it is pretty unstable, from my experience. Updates often include breaking changes, but this is natural for software this early in its development. Once it stabilizes, I think I’ll start encouraging it more broadly.For fun, to answer the questions posed in the article myself:
Is Nushell compelling enough for a single person to adopt it?
Yes, absolutely. If a person is willing to learn a new shell and is willing to adopt something that’s a bit more bleeding edge, I highly recommend giving this shell a shot. That’s not to say you’ll love the shell as much as I do, but I think it’s still worth taking a look at.
Would adopting Nushell broadly as a community move the needle?
Potentially, but now’s not the time. It needs two things, in my opinion, before it can be fully adopted:
- It should become a full replacement for bash. As it is right now, I think the main thing that’s missing is better support for custom completions from programs. You can choose to use a custom completer (like
carapace
) or use the built-in completer (which is used as a fallback when you specify a custom completer I believe), but the built-in completer supports only a specific syntax and does not support custom parsing, from what I can tell. As far as functionality, I haven’t really run into anything I could do in bash that I couldn’t do innu
, completions aside of course. - It should stabilize. Once the language is stable and users don’t need to worry about breaking changes, it can replace bash in the most important places. Right now, a
nu
script isn’t guaranteed to work in 6 months, 2 years, or a decade. It isn’t guaranteed to succeed when you need it to in your CI pipelines for the lifetime of the service your company is developing. Bash, on the other hand, does have these guarantees, generally speaking. If this changes andnu
becomes stable, thennu
can start to replace bash where it matters most.
If these criteria are met and the language starts becoming adopted as a new standard, I think we’ll see people start to appreciate how powerful a typed shell language is, and their expectations from their shell will go up. Scripting languages like Python and Ruby exist to help patch over many of the flaws of languages like Bash, things like lack of certain standard library functions, syntactic issues, portability, etc.
nu
feels like it has many of these features (though not nearly as fully featured of a standard library as Python, to be fair) and could take the place of many of these scripting languages for simple build scripts, CI scripts, etc.Probably the main reason I’m not using Nushell is because it doesn’t support job control (at least last time I checked). Are there any plans to work on that?
I haven’t needed job control for my daily needs, but it may be good to check the issues to see if any have been created for your specific needs. I’m not sure whether what you want is being worked on, but if not, it could be good to create an issue for it.
Edit: Looks like there are some issues open for job control, but nothing really finalized yet.
- It should become a full replacement for bash. As it is right now, I think the main thing that’s missing is better support for custom completions from programs. You can choose to use a custom completer (like