HACKER Q&A
📣 oblio

Are alternative (oil, nu, etc.) shells usable as daily drivers?


Hello folks,

People using alternative shells (oil shell, nu shell, etc) as daily drivers, how is your daily experience?

I'm talking about a professional work experience, i.e. you use the shell as your daily driver at your workplace, not just for playing around.

Fish is probably usable, but outside of fish, is there any other production-ready alternative shell?


  👤 pringk02 Accepted Answer ✓
I use `fish` as my main shell. It's closer to POSIX than eshell or oil, but it's definitely not POSIX.

Personally, the main thing I like about it is that I can't copy paste bash commands. It forces me to read and understand and then convert. It also has some quality of life stuff I really like. I think next time I'm just going to go back to ZSH though as I feel I have learnt enough from the experience of using it that I'm no longer getting new things out of it, and I don't script in fish enough for the nicer syntax to be beneficial enough for me. Honestly, I prefer ZSH variables over fish variables too


👤 zioroboco
I've been using nushell for the past year, and I love it.

For a while I kept bash as my login shell and had nu as my default command in tmux. This had the advantage of allowing a bunch of environment setup to run in bash and get inherited, which allowed my overall setup to be more vanilla (and also nushell doesn't have any kind of job control, so something like tmux is probably a must).

About two months ago I promoted nushell to my login shell. In hindsight that was probably more trouble than it's worth, but I have no intention of changing back.

I now keep a very minimal bash config (~10 lines total) for when I inevitably need to shell into it for some reason. That doesn't happen very often, though — a quick look at my bash history shows that I'm mostly either running stuff interactively which assumes bash, or using it as a repl while working on scripts.

I wouldn't recommend nushell to anyone without a decent background wrangling posix shells, because that's not going anywhere. I've had to reverse engineer a bunch of shell integrations for things like package and version managers, most of which assume bash/zsh/fish.

I don't resent any of that work, because I'm in my shell all day, and the expressive power of nushell is so far ahead of other shells for the kinds of tasks that I'm doing in that environment. I won't try to convince anyone of this, since the question was about suitability for daily use. If you're into it, you're into it.

I'll just add that nushell in particular rewards daily use, because as a language for writing your own custom commands, it has a way of quickly building momentum once you get going.


👤 maxloh
Nushell is great for simple tasks. i.e.

  ls **/data.json | each {|it| mv $it.name $"(dirname $it.name)/data.yml" }
Will be much more complex in bash

  find -name "data.json" | xargs -i bash -c "mv \"{}\" \"\$(dirname '{}')/data.yml\""
Note the escaped quotes and dollar signs in bash. It is really difficult to get them right.

In Nutshell we are actually using "functions" (supported syntax-wise) to do the job, so it will be much more simpler.

---

A more complex example from my recent code:

  ls $"(which npm.ps1 | get 0.path | path dirname)/*.ps1" | each {|it| get name | path basename }
    | each {|script_file| $"alias ($script_file | str replace ".ps1" "") = powershell.exe ($script_file)" }
    | str join "\n" | save --force ~/.config/nushell/env-generated.nu
Will be something like this in bash,

  find "$(dirname "$(which npm.ps1)")/" -maxdepth 1 -name "*.ps1" | sed -r "s/^.*\/([^\/]+)\.ps1/alias \1 = powershell.exe \1.ps1/g" >> "$NU_CONFIG_FILE"
Although the bash one is shorter, it takes me 10x more time to write and test. I initially tried to write it with xrgs but given up due to the complexity involved.

I think Nushell is more readable and easy to write for me.


👤 NoZebra120vClip
In the mid-90s, I used Byron Rakitzis' implementation of Plan 9's rc shell. I used it at work on SunOS 4.x. It was most excellent when I was able to have a meticulously-arranged, bespoke environment of startup and utility scripts around it. The scripting/programming language it incorporates is elegant, and simple, yet powerful, just like a utopian sort of environment envisioned by the Plan 9/Bell Labs folks.

Chris Siebenmann still uses rc, to the best of my knowledge. https://utcc.utoronto.ca/~cks/space/blog/unix/WhyISwitchedTo... He's not a poster to HN, AFAIK, but his blog is frequently featured here. I'm not sure whether he's amenable to sharing his configuration and utility scripts, but if you're at all interested, it's worth asking him, I would suppose.


👤 jnsaff2
How about instead of changing the shell get more out from your existing one.

Starship [0] and fzf [1] will make your life much easier in any shell.

I use fish but they work with bash, zsh and the like.

[0] https://starship.rs/

[1] https://github.com/junegunn/fzf


👤 genshii
Trying out various shells (and converting my various scripts) has been somewhat of a hobby of mine for the past several weeks. Long story short, I settled on using fish both as my shell and as the language to write my scripts in.

nushell is really, really great as a shell but I find it far too limiting in some cases to use as a scripting language. For example, you can't build a non-external command from a string and run that command. I'll definitely come back to nushell in the future.

elvish is also really great, especially as a scripting language (being able to pass around lambdas is amazing), but ultimately fish has so much community support and so many nice plugins that it's hard to justify using anything else at the moment.


👤 acdha
I’ve used fish for years at work but that’s mostly a personal choice similar to your preferred editor. It’s more productive, but nobody else really sees it.

What’s helped a lot more has been replacing shell scripts with Python once they hit a certain complexity level. Huge reduction in code size, better functionality (e.g. it’s trivial to have good CLI argument parsing so people actually add it), and every time a large bash script has been converted some set of error-handling bugs has been fixed.


👤 steinuil
I've been using nushell for a couple of weeks and I'm finding it good enough for a daily driver. I was never much of a shell script person so I don't miss any bash-isms, on the contrary I find that I can easily perform some tasks I'd normally have fired up a Ruby REPL to do, both because the language is much more sane and because it handles structured data and file formats natively. As for normal shell usage (running commands) I definitely prefer it to bash, the completion UI is much nicer and you can set it up very easily for external commands. Also it supports Windows so I don't have to switch to powershell mode when I'm on my gaming PC.

Again, I'm not a shell script person and I never liked sh/bash so I don't have any 1000 line shell scripts that I'll be porting over to nu, and if I need to do something that would take more than a couple lines of code I'll switch to a proper programming language. I definitely wouldn't ship nushell scripts in production or for anything that isn't my local configuration because the commands and the language itself are far from having a stable API.


👤 voxadam
I'm a Linux native guy and I haven't hardly touched Windows in years but I still find myself curious about PowerShell. Is PowerShell even remotely suitable as a Linux shell? Is there any hope for PowerShell on Linux, it's an interesting take on shells.

👤 sakesun
I decided last year to bite the bullet and learn Powershell. I think I will no longer have to wonder if there is a better option anymore.

👤 txomon
I use elvish[0] and have been using it as my main shell for the last 2 years. I like the focus on datastructures and flows (such as exceptions).

It is mature enough for me, and I have found that the nuance of having non-posix compatibility in some things doesn't annoy me as much as when I hit a problem that is too small to write python and to complex for bash.

Community is great, and I always find the answer to my problems in either the chat or other code samples.

[0] Elvish webpage: https://elv.sh/


👤 atemerev
I am a fish fan… but even fish has some difficulties, as many scripts and tools in the wild expect a bash-compatible shell. Otherwise, it is excellent and I use it on my computers 100% of time.

I guess other alternative shells like nu have about the same level of usability. If you like them, you can use them.


👤 traverseda
Xonsh works pretty great. I've used it as a daily driver in the past but am trying out oh-my-zsh right now. Pathlib (and pathlib.glob) are pretty amazing, and python syntax is great for a shell.

https://xon.sh/


👤 sureste
I've used Fish for about 2 years now. Before that I used ZSH for about 6 months. I'm relatively new daily driving Linux. About 3 years.

The thing about ZSH that made me jump ship was that even though you can customize it like fish (with Oh My ZSH plugins) ZSH was always slow or didn't display some things correctly. It was frustrating having to wait a few seconds for a command or having things just not work out correctly.

Fish, on the other hand, is fast and has a lot of quality of life features like typing part of a command and then serach with the up key. I didn't even install any plugins (I like to Fisher[1]).

Also, Fish has gotten me more and more into shell scripting. The docs for Fish are very clear and easy to navigate. I love how you can have custom scripts on the .config folder or abbreviations[2], which I think are superior to aliases since they expand into the command you're calling.

I was using it as the default shell for my user until recently and it was fine, but I have gone back to Bash as my default shell and just set my terminal emulator to start into Fish on startup. I didn't have any incident. I just wanted to avoid anything unexpected further down the line.

[1]: https://github.com/jorgebucaran/fisher

[2]: https://fishshell.com/docs/current/interactive.html#abbrevia...


👤 nurspouse
I've been using xonsh professionally since around 2018 - in both Windows and Linux. Love it. Getting it to run existing bash scripts was a pain earlier on, but has gotten much better.

The one thing I don't do is make it my official shell in Linux. I keep bash/zsh as my shell, but the first thing I do in any shell is launch xonsh. Occasionally it does crash and it's nice to end up in a "backup" shell in case I need to recover anything.


👤 d12bb
I'm using Fish for years, tried Nushell recently, but it didn't click for me. While I like the principle of data being more than just plain text, it probably was just too alien to me.

A few here said they don't use Fish or another shell due to compatibility issues, but I wonder what the problem is: If I want to use a script written for another (POSIX) shell, it most likely has a shebang (or I can add it), so it will get properly executed using that other shell…


👤 VyseofArcadia
I use eshell for most things, but I do have to occasionally pop open an ansi-term.

👤 adityaathalye
At work, I would use the workplace standard, for easy sharing and interop with colleagues and systems. Work scripting has been Bash because that's been the default (so far).

Personally, Bash is stuck to my fingers out of habit.

I tend to write my scripts in a Functional Programming style, which plays well with stdio and pipes, and makes for composable and testable code.

Like this: https://www.evalapply.org/tags/bash/

edit: add reference


👤 Kinrany
Oilshell (osh, not oil) is supposed to be backwards compatible. Not really using it, mostly because I can't remember to and I don't want to set it as default yet.

👤 euclaise
I use yash personally (https://yash.osdn.jp/), but I'm not sure if that counts as 'alternative' since it's POSIX-compliant. It's small, interactivity-friendly, and POSIX compliant all at the same time, which is something that other shells can't match.

👤 rcpt
I was very happy with zsh and fish when I was at small companies or grad school.

Now I work at Google where there are tons of shared bash commands and scripts. It's so easy to simply copy/paste something that works into your shell instead of futzing around with compatibility differences.

It'd be neat to work at a place where everyone used fish but I've never experienced that.


👤 readingnews
I would probably turn that around and ask why are you asking?

Outside of command line editing features, some kind of completion, novelties, and prettiness, I think most of the time it always comes back to "I chose this shell due to syntax, or programming of some kind". e.g. tcsh due to the C-ness of it.

I am writing this from Linux, been using csh on Solaris and then bash on linux since, well since back then... I have seen a lot of shells come out, but every time I switch to one I think about my personal needs in the shell and portability (I do manage a large number of boxes, and most of them do not have extra items installed, including shells) so I end up back at bash/dash/sh.

Again, I would ask myself what you need in the shell. If ZSH or Fish or csh or ksh or some esoteric shell fit the bill, why not just try it as a daily driver? I mean, what is the worst possible outcome? (unless you make a living making life support shell driven software...)


👤 OJFord
I think they're all fine (if they claim some sort of stability) with the proviso that you're going to occasionally want to drop into bash or something to check something out before committing it to a script.

(I assume you're talking about interactive use, not using them as the shebang line in your scripts. I wouldn't do that. But mainly just because then you need everyone to agree to install it, or to install it on your servers, etc.)

> Fish is probably usable, but outside of fish

I use fish, have for years, and I say the above to include it. Sometimes I'm not certain something works as I think it does (bash's myriad interpolation/variable manipulation techniques say) and so I switch shell to test it.

It does have bugs and weirdness of course, especially the vi mode, but it's not going to .. idk, rm -rf / when I only told it to rm -rf ~/.cache/* or something.


👤 331c8c71
I've been using fish for a couple years on my work laptops

👤 yencabulator
I was all ready to jump in with nu but I can't live without control-Z and `foo &` :-(

https://github.com/nushell/nushell/issues/4564#issuecomment-...

And coming back to this after all this time, it seems the nushell issue tracker is not getting groomed at all -- are the authors starting get tired of it? https://github.com/nushell/nushell/issues/4320 lists a huge number of duplicates.


👤 tn1
Try to use it as a daily driver. If you encounter a situation where there's a bug/weirdness/missing feature, you can always temporarily launch bash or whatever to do the one thing you need to do, then exit that (sub)shell and continue with the first one

👤 karesztrk
Im on Nu shell on Windows os. Im very satisfied with it

👤 bilekas
Bit of a strange one maybe but for my windows machine I've actually been using cmder (conEmu) with ZSH and over the past few years have been extending it with plugins to suit just right.

It's super fast supports everything I need now and couldn't work without it.


👤 jceb81
I recently moved from fish to nu. Fish provided the best experience so far. My reasoning for switching to nu is to move closer to a programming language in my shell. Overall, I'm very happy with nu, especially after they added support for direnv.

👤 SomeoneOnTheWeb
I personally use ZSH with Prezto, which makes it considerably better than vanilla ZSH. I've tried Nushell and it seems to work quite fine but it's really a different paradigm that makes you think of the data differently than *sh shells.

👤 happimess
I have been using nushell for work for about 4 months, ever since I inherited a windows-only project and was looking for a decent shell experience. I'm not doing any extensive scripting, but I do live in my terminal.

I really like it despite its quirks. I love the implicit $in variable. I find the library easy to understand. I'm only using it interactively so if I have to restart my terminal every once in a while I'm not bothered by it. I trust that those sorts of things will get straightened out --- the git repository is very active.

I saw the maintainers in this thread, so shout out for your good work.


👤 LinuxBender
I spend most of my time in #!/bin/ash and while I could install bash on everything using ash reduces my use of bashisms [1]. I stick with ash or sometimes bash so that my skills and habbits albeit not perfect are transferable to any system belonging to almost anyone or any company.

[1] - https://teddit.sethforprivacy.com/r/linux/comments/1h13g8/ba...


👤 ledauphin
I use `xonsh` and it works fine. I'm not sure I'm getting as much benefit out of it as I expected to, so I could probably switch back to `fish` and be pretty happy.

👤 pthr
oh-my-zsh on Linux is absolutely great, especially with autosuggestions and syntax-highlighting enabled.

On Windows I've settled with Windows Terminal and clink.

I've tried Powershell too but never got used to it. The concept where everything is an object sounds great. But in practice, to me it only is when scripting. When doing interactive work on the command line (which is what I do all day), as a human, nothing beats plain text for me. Enlighten me if this I missed the point of Powershell.


👤 Myrmornis
I've used bash/zsh for 20 years and I've been using nushell daily for work and personal projects since I tried it 6 months ago. It's fantastic -- you can do some really novel things that you would never normally do in a shell. But you do have to be prepared to invest some time in learning to do things differently from POSIX shells. The Discord community is very helpful.

👤 aidenn0
Oil is almost there as a daily driver for writing scripts. Main thing holding me back is I can't assume it's installed, unlike bash.

👤 yewenjie
I wish murex got some more love - https://murex.rocks/

👤 bobbylarrybobby
Fish is very mature at this point, well supported by other tools (i.e., it's common for the supported shells to be bash, zsh, and fish), and has been inching towards a shallow level of bash compatibility. Its history and suggestion features are also fantastic.

👤 DiabloD3
Given that Fish is switching to Rust, I'm considering Fish as my alternate shell. I've tried many, but I always end up going back to Bash.

Is there any reason why you think Fish isn't enough, and you're looking at super-niche ones?


👤 kuon
I use fish because it has great defaults, and it is very production ready as a daily driver with scripts mostly as helpers.

I'm very interested in nushell, but haven't tried it yet. It seems to have some similarities with powershell.


👤 trollied
bash and zsh are great. I see this "reinventing the wheel" stuff all the time where it's not actually needed if you learn the current tooling well. See this time & time again with SQL.

👤 v3ss0n
Add xonsh too, Only Zsh seems to be usable as daily driver. You gotta copy paste some shell script anyways and if the shell is not bash compatible, it's useless

👤 dncornholio
Alternative shells are a hype IMO. I don't need programming in my shell. So I just use bash, and for complicated scripts I just make a python script.

👤 anonyfox
I am still kinda bitter about mac os replacing the default bash with zsh. I gained nothing from that unwanted update, but got compatibility pains suddenly.

Is something is more complicated than a one-liner, use a real programming language instead, with proper building blocks, tooling and documentation. Use something like Go to crosscompile if you don't want to depend on something on the host machine.

In my experience, even very trivial short shell scripts over time tend to grow into a pain, that could totally be avoided when using a real language instead.


👤 tonnydourado
Does PowerShell counts as alternative? Is wildly different from any POSIX shell, but I use it daily and it's kinda alright.

👤 notorandit
Bash. Forever.

👤 hprotagonist
i know a fair few eshell users. i’m not among them but they’re out there

👤 nathias
I'm using zsh, but that hardly counts as alternative

👤 anthk
mpsh it's interesting.

https://www.cca.org/mpsh/


👤 chubot
(Oil author here) We're making great progress on polishing Oil -- namely semi-automatically translating it to C++ -- but can still use more help.

In particular, starting in October, contributor Melvin Walls has almost single-handedly enabled the interactive shell to be translated, including some of the hardest bits like shell traps, signal handling, and GNU readline bindings.

I was a little worried that we'd run into difficulties with our style of Python and this "inverted" / callback-heavy component, but the result is better than I expected. Melvin came up with creative and solid solutions.

So we have a tiny garbage-collected runtime, and the rest is statically-typed, memory safe Python code. (We learned first hand that memory safety is especially important when you're interfacing with a garbage collector.)

-----

So we need more people who can put in some elbow grease. You can even be paid to work on open source code! We just got a second grant from NLnet, which I mentioned on the blog.

https://news.ycombinator.com/item?id=34221617

https://www.oilshell.org/blog/

-----

There are a few misconceptions in this thread which make me realize I need to update the blog:

1) The Oil project contains OSH, which is not only POSIX- compatible, but bash-compatible. Some people don't believe that it could be both things -- how could it be both compatible and new? But that is absolutely true (and a major reason why it's a big project!)

You can type 'osh' and it will run your existing shell scripts, or type 'oil', and it's a brand new language. ( Tour: https://www.oilshell.org/release/latest/doc/oil-language-tou... )

(Note: I also plan to slightly rename the project, to address this confusion, since I've encountered it before. It's confusing that "Oil" is both the whole project and a component of the project.)

-----

2) On the other hand, the Oil language is NOT "just waiting to be deployed". There are a few TODOs in that doc, and they're actually quite big. Though filling them in is going to lead to something pretty great which spans a variety of domains, IMO. I hope to write a few blog posts about that in the coming months.

As always feel free to check out the code and join Zulip. On most Linux distros you can get a working bin/osh in about 30 seconds:

https://github.com/oilshell/oil/wiki/Contributing

The code is in great shape, and completely different than it was 6 months ago. Especially the C++ side. But you can just hack on Python, with MyPy, and it just works!

The tools are also very solid now, with dozens of cleanups/fixes even in the last few weeks. Getting the GC working was a big breath of fresh air that unlocked a lot of possibilities.


👤 hanaryy
hanaryy