[HN Gopher] The fish shell is amazing
       ___________________________________________________________________
        
       The fish shell is amazing
        
       Author : RMPR
       Score  : 279 points
       Date   : 2021-11-25 13:58 UTC (9 hours ago)
        
 (HTM) web link (rmpr.xyz)
 (TXT) w3m dump (rmpr.xyz)
        
       | iamevn wrote:
       | I've found fish to be absolutely wonderful for shell scripting. I
       | can throw together a loop or a function with the sort of
       | confidence I never could have in bash.
        
       | peterhil wrote:
       | Have you tried Oil Shell? http://www.oilshell.org/
        
         | sigmonsays wrote:
         | I've got way too many years of bash under my belt to invest in
         | another shell. I gave oil shell a solid look and decided to not
         | use it. While that may sound wrong, I dont see oil shell having
         | enough features that are different enough to sway people over.
         | I can't think of the saying here, but essentially its not
         | disruptive in the shell space.
         | 
         | Also, it's just shell. By the time I end up with a complicated
         | shell script, i've rewritten it in go, python, etc.
         | 
         | This is just my two cents, if I see more people talking about
         | and using oil shell, I may reconsider.
        
         | opk wrote:
         | I've not tried for a while but just getting that to even
         | compile was a nightmare. It seemed to be a fork of the Python 2
         | code base. They've done the right thing by having a POSIX
         | compatible layer but I completely disagree with their idea of
         | what is wrong with the existing Bourne syntax and needs
         | changing. An interactive shell needs to keep special characters
         | to a minimum and stick to commands as the basic unit on which
         | things are built. Zsh is already able to correct many of the
         | worst elements of the Bourne syntax.
        
       | xhevahir wrote:
       | Can anyone explain why getting similar functionality in zsh is
       | such a PITA? Every time I've tried to get smart-autocomplete
       | history stuff working in it I've given up. Is it because the
       | community is much more fragmented?
        
       | jordiburgos wrote:
       | Not for me, it breaks the .sh scripts and have to be rewritten.
        
         | binarysneaker wrote:
         | +1. What's the point of a great shell, if I can't run the
         | millions (!!) of existing scripts without refactoring them?!
         | Zsh does the autocompletion just as well, so I'll stick with
         | that.
        
           | thrwyoilarticle wrote:
           | Here's how you run POSIX code inside a fish shell:
           | bash
        
         | boudin wrote:
         | You don't need to rewrite any script as long as your scripts
         | have the correct shebang, those scripts works perfectly.
         | 
         | I would strongly not advise to make it the default shell though
         | as this can lead to issues. The way I use it is to have bash as
         | my main shell but my .bashrc starting fish if it's not started
         | explicitly from bash: (it's a trick form arch wiki)
         | 
         | if [[ $(ps --no-header --pid=$PPID --format=cmd) != "fish" ]]
         | then exec fish fi
         | 
         | I've been using fish for a long time with this setup and never
         | encountered an issue.
        
           | pxc wrote:
           | > I would strongly not advise to make it the default shell
           | though as this can lead to issues.
           | 
           | I've heard this a lot, but I've been using Fish as my login
           | shell for many years, and it's really not a problem
           | 
           | I think maybe some vim plugins call out to your $SHELL or
           | something, but assume that it's bash-like? but I've never run
           | into a serious issue with just using Fish as my login shell
        
             | boudin wrote:
             | I don't remember the root cause as it was a while ago now,
             | but in my case I couldn't login on a TTY because of that.
        
               | pxc wrote:
               | That would be a nightmare for sure. I can't blame you for
               | being cautioned by an experience like that.
               | 
               | I've been running Fish as my login shell for almost 10
               | years now, on Linux and then additionally for ~4 years
               | for intermittent macOS usage (only at work) without
               | issue.
               | 
               | I don't really like launching Fish from ~/.bash_profile
               | because or similar because I don't like having to type
               | `exit` twice to exit, and `exec`ing into Fish leaves you
               | in one shell but with your $SHELL variable set to
               | another.
               | 
               | But if that works for you, more power to ya, and it's
               | good for Fish users to know that that's an option if they
               | run into issues using Fish as a login shell.
        
               | boudin wrote:
               | Now that you say that, that's funny as I do not have to
               | exit twice. I don't know why though as it seems that it
               | should be the case.
        
               | pxc wrote:
               | Does your profile call `exec fish -i` rather than just
               | `fish -i`? In that case, you'll only exit once :)
               | 
               | From the `exec` manual:                      If exec is
               | specified with command, it shall replace the shell
               | with command without creating a new process. If arguments
               | are            specified, they shall be arguments to
               | command.  Redirection            affects the current
               | shell execution environment.
               | 
               | https://man7.org/linux/man-pages/man1/exec.1p.html
        
         | 2pEXgD0fZ5cF wrote:
         | > it breaks the .sh scripts
         | 
         | What? No it doesn't. Shebang exists for a reason, and you
         | should ALWAYS use it anyway, fish or not.
        
         | dimator wrote:
         | It's not intended to run .sh scripts though. This is line
         | saying python breaks .pl scripts.
        
         | ayushnix wrote:
         | I can't think of a single reason why you'd need to rewrite your
         | POSIX sh or bash scripts to be able to use Fish. The
         | `#!/bin/sh` shebang is there for a reason.
        
       | vander_elst wrote:
       | Vi mode was not good enough: first thing I do in a new shell is
       | `set -o vi` and then try to do simple things: replace parts of
       | words, copy/paste, search history. Fish in my experience was way
       | worse than zsh and bash. Maybe things changed in the meantime?
        
       | stardenburden wrote:
       | > my grandma was afraid of Linux, until I showed her that fish
       | can autocomplete
       | 
       | Unknown user on discord
        
       | fouronnes3 wrote:
       | I started a new job recently, and I've been thinking about
       | terminals and shells. I love a well configured modern env, but I
       | can't be bothered spending the literal HOURS you need to setup
       | everything... zsh, zsh plugins, fzf, fzf plugins, fd, dot bare,
       | patched fonts, 24 bit terminal color, temrinal color theme,
       | binutils color theme, powerline, diff-so-fancy... I get that the
       | devil is in the details, but come on, can I just have a single
       | "terminal environnement distribution" with sensible defaults and
       | that's it. Something like SpaceMacs/SpaceVim but for all that. I
       | don't want to spend the time configuring and maintaining this
       | wonderful pile of obsolete-and-yet-somehow-still-the-best-we-got
       | technology.
        
         | colelyman wrote:
         | Have you tried https://ohmyz.sh/ ? It is the closest thing to
         | SpaceMacs/SpaceVim for ZSH that I know of.
        
           | anamexis wrote:
           | If oh my zsh is Spacemacs, then prezto is Doom Emacs:
           | https://github.com/sorin-ionescu/prezto
        
         | peakaboo wrote:
         | Just synk your dot files with your config and a readme for what
         | you need to install. Getting my shell up on a new computer is
         | very fast because of this approach.
        
         | mongol wrote:
         | I agree with you here. I am like a terminal nomad, I have of
         | course my own computer but there are so many other computers I
         | log in to over the course of my career. They usually have bash
         | and I have learned to just like that. I don't want to maintain
         | one habit for my pet computer, and another when I am a nomad.
        
         | pm90 wrote:
         | This is why most people have a dotfiles repo in their GitHub.
        
           | Barrin92 wrote:
           | it's not such a trivial thing even if you manage dotfiles
           | because a lot of things still break between different
           | environments, different operating systems, don't work with
           | new releases, rely on some folder structure that changes,
           | etc, it still requires fiddling.
           | 
           | Of course you can get even more involved and manage your
           | dotfiles with ansible or something but the advantage of a
           | tool like fish is that it's almost perfectly usable out of
           | the box. More config files will always increase the chance
           | for things breaking.
        
           | BugsJustFindMe wrote:
           | > _most people have a dotfiles repo_
           | 
           | Most people do not have a dotfiles repo.
        
             | Aloha wrote:
             | Most people do not even have a github.
        
         | ilaksh wrote:
         | I stopped using patched fonts because of that. And I never felt
         | like 24 bit terminal colors was necessary. You can just install
         | fish and then the fisher plugin manager and then install a
         | theme/prompt plugin.
        
         | jkelleyrtp wrote:
         | I use Powerlevel10k + ohmyzsh + Fira code + and the first
         | google entry to "make zsh like fish". Usually takes me about 10
         | minutes to get set up in a new environment.
         | 
         | https://gist.github.com/abhigenie92/a907cdf8a474aa6b569ebe89...
        
         | the_duke wrote:
         | That's exactly why I use fish.
         | 
         | The default setup is pretty much perfect for what I want. My
         | only additions are fzf for history search, a bunch of aliases
         | and Starship for informative status lines.
        
       | donio wrote:
       | zsh has a short form for for loops too:                   for i
       | in *.pdf; echo $i
       | 
       | Shorter than the fish version. Does that mean that it's a better
       | shell then?
        
       | oakmad wrote:
       | Anyone else read that as "The fish smell is amazing"?
        
       | beermonster wrote:
       | Is there anyone who can provide a simple summary for bash v zsh
       | vs fish? Maybe I'm lazy but I've just stuck with bash for.. well
       | since ever. Maybe it's time to try something new but then if it
       | ain't broke... anyway would be interested in what things it does
       | that I never knew I needed or things which just make life
       | simpler/easier.
        
         | bobbylarrybobby wrote:
         | https://fishshell.com/docs/current/fish_for_bash_users.html#...
        
         | emilecantin wrote:
         | Autocomplete is much better. For example, just typing "y"
         | displays "arn start" in gray _after_ my cursor. I can then
         | refine my command, or use right-arrow to accept the suggestion.
         | 
         | And this is just one example; fish is full of small usability
         | touches like that.
         | 
         | If you need to run a bash script, `bash the_script.sh` still
         | works
        
           | mikojan wrote:
           | Of course you could always just do ctrl+r and cycle through
           | and refine suggestions in bash
        
             | pxc wrote:
             | The Fish suggestion the GP is describing isn't based on
             | history, although it also autocompletes from commands in
             | your history that way. That's part of the baseline
             | autocompletion functionality of the whole shell, for all
             | command names, local files, etc.
        
           | notfed wrote:
           | Zsh does this too...but you have to configure zsh-
           | autosuggestions.
           | 
           | The difference is that fish does this of the box with no
           | configuration.
        
       | err4nt wrote:
       | I've been happy with Fish shell for years!
       | 
       | Yes, I could fiddle and twiddle with settings and configure a
       | nicer shell, but Fish on its default settings on any OS just
       | makes things smooth and easy!
        
       | aquajet wrote:
       | Is there a reason fish isn't posix compliant? From my experience
       | (which is rudimentary tbf) there are only detriments due to the
       | lack of sh scripts not working out of the box.
        
         | akho wrote:
         | The reason is that POSIX shells are ugly and stupid, and fish
         | syntax fixes (some of the) fundamental errors made in Bourne
         | shell. Things like "${args[@]}" and other quoting and array-
         | expansion syntaxes should not exist. Subshells are difficult
         | and surprising. Weird keywords (esac) are weird.
         | 
         | Note how Plan 9 rc is also not POSIX.
         | 
         | Shell scripts have shebangs and work.
        
       | dang wrote:
       | Ok, let's do this. Past related threads:
       | 
       |  _Fish shell_ - https://news.ycombinator.com/item?id=27180420 -
       | May 2021 (118 comments)
       | 
       |  _Fish Shell 3.2_ - https://news.ycombinator.com/item?id=26302678
       | - March 2021 (128 comments)
       | 
       |  _Fish is not operational on a VT220 terminal (2015)_ -
       | https://news.ycombinator.com/item?id=25526237 - Dec 2020 (113
       | comments)
       | 
       |  _New Features in the Fish Shell_ -
       | https://news.ycombinator.com/item?id=24631138 - Sept 2020 (138
       | comments)
       | 
       |  _Dolphins learn from their peers to use empty shells to catch
       | fish_ - https://news.ycombinator.com/item?id=23660910 - June 2020
       | (8 comments) (<-- just kidding)
       | 
       |  _Fish: A command line shell for the 90s_ -
       | https://news.ycombinator.com/item?id=21361696 - Oct 2019 (83
       | comments)
       | 
       |  _Fish shell 3.0_ - https://news.ycombinator.com/item?id=18776765
       | - Dec 2018 (220 comments)
       | 
       |  _Fish: A user-friendly command line shell for macOS, Linux, etc_
       | - https://news.ycombinator.com/item?id=15910897 - Dec 2017 (204
       | comments)
       | 
       |  _Fish (Shell) for a Week_ -
       | https://news.ycombinator.com/item?id=14422672 - May 2017 (2
       | comments)
       | 
       |  _The fish shell is awesome_ -
       | https://news.ycombinator.com/item?id=14179081 - April 2017 (7
       | comments)
       | 
       |  _Fish Shell Design Principles_ -
       | https://news.ycombinator.com/item?id=11102941 - Feb 2016 (71
       | comments)
       | 
       |  _Fish shell 2.2_ - https://news.ycombinator.com/item?id=9873090
       | - July 2015 (70 comments)
       | 
       |  _Fish shell_ - https://news.ycombinator.com/item?id=9566441 -
       | May 2015 (182 comments)
       | 
       |  _FISH Shell: A dynamic shell_ -
       | https://news.ycombinator.com/item?id=8783150 - Dec 2014 (3
       | comments)
       | 
       |  _Fish shell 2.1_ - https://news.ycombinator.com/item?id=6626635
       | - Oct 2013 (151 comments)
       | 
       |  _fish shell_ - https://news.ycombinator.com/item?id=6224524 -
       | Aug 2013 (75 comments)
       | 
       |  _Fish shell 2.0_ - https://news.ycombinator.com/item?id=5723235
       | - May 2013 (175 comments)
       | 
       |  _Fish 2.0 shell beta_ -
       | https://news.ycombinator.com/item?id=5567639 - April 2013 (56
       | comments)
       | 
       |  _Fish: Finally, a command line shell for the 90s_ -
       | https://news.ycombinator.com/item?id=4073162 - June 2012 (146
       | comments)
       | 
       |  _Fish sucks (but your shell sucks more)_ -
       | https://news.ycombinator.com/item?id=2031110 - Dec 2010 (60
       | comments)
       | 
       |  _Fish - The friendly interactive shell_ -
       | https://news.ycombinator.com/item?id=820677 - Sept 2009 (16
       | comments)
       | 
       |  _Fish Shell: A User-Friendly Shell or Like a Heavily Customized
       | zsh_ - https://news.ycombinator.com/item?id=811113 - Sept 2009 (8
       | comments)
        
         | pxc wrote:
         | Fish is wonderful! I'm glad it gets this repeated attention :D
        
         | xvf22 wrote:
         | I seriously hope you have automation to pull these in! Thanks!
        
       | [deleted]
        
       | als0 wrote:
       | > when you type something invalid it's red, blue when not
       | 
       | Does anyone know how to do something like this with Bash?
        
       | rgoulter wrote:
       | Not restricted to fish shell, but I can further recommend
       | starship.rs as a prompt, and using fzf to search through command
       | history.
        
         | pletnes wrote:
         | Fzf can search virtually anything, since you can pipe output
         | into/through it. It's fantastic.
        
       | kbd wrote:
       | As another commenter pointed out, while Fish has some nice out-
       | of-the-box features, they're all achievable in Zsh with a few
       | lines of plugins. And did you know Zsh has a short for loop?
       | Along with fantastic plugins like fzf-tab, I don't see a reason
       | to use anything else right now.
       | 
       | Though, I'm keeping a very interested eye on Nu shell. They're
       | doing a lot of stuff right, and I expect it will become a very
       | useful scripting language in its own right even when not used
       | full-time as a shell.
        
         | legutierr wrote:
         | A recent demo of Nushell given a couple of weeks ago:
         | 
         | https://media.handmade-seattle.com/nushell/
        
           | ghostly_s wrote:
           | Oh wow...finally someone is bringing the great ideas of
           | Powershell to unix. Can't wait to see how this turns out.
        
             | pxc wrote:
             | You can run PowerShell on Unix already, but imo it is too
             | slow for interactive use. Getting it to act like a Fish
             | makes it very, very slow
        
               | Aloha wrote:
               | I can't imagine it being any slower then it already is
               | out of the box.
        
               | exyi wrote:
               | But I think it's quite good for scripting. You can call
               | any system command as easily as in bash while being able
               | to use variables for not just strings. I'd never use it
               | as interactive shell, of course :]
               | 
               | Also... the script will then run only on my machine as
               | most Linux systems don't have powershell and most Windows
               | don't have the Unix commands I still use all the time.
        
               | pxc wrote:
               | Yeah, I agree that PowerShell is great for scripting. I
               | don't do that much scripting on my personal Linux systems
               | that really calls for PowerShell, but I like using
               | PowerShell for hitting HTTP APIs or processing structured
               | data at work.
               | 
               | > Also... the script will then run only on my machine as
               | most Linux systems don't have powershell and most Windows
               | don't have the Unix commands I still use all the time.
               | 
               | Hahahaha! Oof.
               | 
               | It's more work, but when I use PowerShell, I try to use
               | pure PowerShell, both for aesthetic reasons (cleanliness,
               | 'portability') and just in order to practice and learn
               | more PowerShell APIs along the way.
        
             | michaelcampbell wrote:
             | > great ideas of Powershell to unix
             | 
             | Now-If-They-Could-Improve the Syntax To-Make-It-Usable.
        
               | nojito wrote:
               | At least it's consistent. Verb-Noun
        
         | GrinningFool wrote:
         | Thanks for that, fzf-tab was the last missing piece in my
         | setup.
        
           | kbd wrote:
           | Nice. Yeah it works great. I have an extensive set of git
           | aliases. Yesterday I was merging a branch with `gmn` (`git
           | merge --no-ff`, which is actually an alias to `g mn`, where
           | `g` is an alias to git of course) and it gave me a fuzzy find
           | of my branches through all the aliases.
           | 
           | Edit: also things like `kill`. `kill [tab]` gives you a
           | fuzzy-find list of all your processes so it's way faster to
           | use than ps | grep.
        
         | nerdponx wrote:
         | Zsh has become an indispensable power tool for me. I am
         | interested in other shells (especially PowerShell), but Zsh is
         | now embedded deep in my brain, next to Vim and Python, and I
         | doubt I will ever seriously migrate away.
         | 
         | That said: what do you like about Nu shell specifically?
        
           | kbd wrote:
           | > what do you like about Nu shell specifically?
           | 
           | A whole bunch of things:
           | 
           | 1. abandonment of POSIX shell syntax. We can do better. I'm
           | happy with Zsh being POSIX-compatible, and that will always
           | be there.
           | 
           | 2. a focus on structured data. Nu basically has hierarchical
           | dataframes built-in, along with lots of facilities for their
           | manipulation. There have been a few other attempts at this
           | but the benefits are obvious. Rather than figuring out how to
           | `awk` your way through whatever text output a command
           | generates, command output in Nu is structured and everything
           | can be handled in orthogonal ways.
           | 
           | 3. modern conveniences built-in, like syntax highlighting,
           | and AFAIK they want to include features like "do something
           | when you cd into a directory" that we currently need more
           | tools for (i.e. direnv, which I highly recommend!)
           | 
           | 4. serious technology. The people behind it are experts and
           | JT has been showing off (https://youtu.be/3o8b_QcrFHc) the
           | engine that enables trivially parallelizable loops. No more
           | need for `xargs`.
           | 
           | 5. I hesitate to mention "made in Rust" as a feature, but
           | using a modern language for core infrastructure does matter.
        
             | kbd wrote:
             | I'll put it this way: Nu shell seems perfectly supportive
             | of my philosophy that a shell is basically a REPL for a
             | computer, and they're taking the ergonomics of an
             | interactive REPL along with the _programming language_ that
             | powers that REPL seriously.
             | 
             | The thing is, there's currently NOTHING GOOD for "shell
             | scripting". Shell sucks (yes it does), so for anything more
             | than very short things I'd rather write Python. But Python
             | sucks for shell-like things, parallelization, it has slow
             | startup, and you also can't do things like put environment
             | variables into your session or change the working
             | directory, so you often wind up writing shims (eg. Broot's
             | br alias - https://dystroy.org/broot/install-br/).
             | 
             | Yes I've looked at Xonsh but maybe the additional syntax is
             | offputting to me. Like, I wouldn't use it as a shell over
             | Zsh (how's Xonsh's fzf support? I don't know, but I know
             | everything's going to support Zsh), and I dunno if I want
             | to use its syntax extensions over just Python. Though It's
             | always on my list of things to re-explore, and maybe it'll
             | click one day. But it being based in Python makes it feel
             | slow (I wrote my prompt in Zig to get it to be fast...)
             | 
             | This is relevant to mention: I wrote a small Python library
             | (https://github.com/kbd/aush) that's basically a DSL for
             | subprocesses, so it tries to make it more convenient to do
             | shell-like things. I find it preferable to shell or Python
             | alone most of the time. Here's an example of its use in my
             | script that creates a new Python project:
             | https://github.com/kbd/setup/blob/master/HOME/bin/create-
             | pyt...
             | 
             | I haven't figured out a convenient way to implement shell
             | piping well with Python's pipe operator, or pass through
             | interactive output directly (so things that "update" the
             | display, like poetry and npm don't behave the same as they
             | do interactively) so it's still .9 status, but it works
             | really well for what it is, and you can always write
             | "regular Python" along with it.
             | 
             | Anyway, Nu seems to be an attempt to put a "real"
             | programming language REPL in my shell, from people who have
             | serious language experience, so I'm hopeful it'll be great.
        
             | enriquto wrote:
             | > A whole bunch of things:
             | 
             | I appreciate the clarity of your message... curiously
             | enough all the things that you mention I see them as anti-
             | features of nushell (except the first one)
             | 
             | 1. Posix shell is clunky has its limitations but there's
             | nothing really flawed about it. It is nice to have non-
             | posix shells, though; in that I agree with you.
             | 
             | 2. I hate hate hate the very concept of dataframes. They
             | seem like a useless over-engineering. Plain tabular data is
             | a perfect, and the columns of a table are always named 1,
             | 2, 3. The whole point of abstraction is that you do _not_
             | care about the meaning of the columns of your table, and
             | the programs (like the lovely awk) that deal with these
             | columns do not care either. There 's nothing more
             | "orthogonal" than that: filters that do not understand the
             | data but can filter it anyway.
             | 
             | 3. syntax highlighting is a very personal issue; in my case
             | I prefer my terminal not to look like a christmas tree.
             | 
             | 4. xargs is one of my favorite tools (alongside gnu make
             | and gnu parallel) and there's nothing "unserious" about it.
             | The happiest moments in my programming life are when I get
             | to use these tools. Not using xargs sounds like a
             | nightmare!
             | 
             | 5. Rust is definitely an anti-feature to me: it's like a
             | language that was built by picking the worst features of
             | many already ugly languages. I would not really care in
             | what language the shell is written, but I'd rather have it
             | written in saner, "unsafe" languages.
        
               | nerdponx wrote:
               | I strongly disagree about data frames. I am a data
               | scientist professionally, and I think the data frame is
               | one of the most important programming abstractions I use.
        
         | rainingmonkey wrote:
         | > while Fish has some nice out-of-the-box features, they're all
         | achievable in Zsh with a few lines of plugins.
         | 
         | The point of fish is that there is no configuration required.
         | 
         | You don't have to learn to configure it, you don't have to be
         | part of "the community" to learn which plugins to use, you'll
         | be able to sit in front of any fish prompt and have it work as
         | expected without having to move dotfiles around.
        
           | kbd wrote:
           | That's a cool argument for Fish for beginners. When you spend
           | thousands of hours in a shell that doesn't matter as much. I
           | don't see any benefit for someone who has Zsh set up well,
           | but yes you do have to google once how to configure auto-
           | completion and so on.
        
             | ViViDboarder wrote:
             | Probably little for anyone who has any shell "set up well".
             | Just if they are tired of spending time tweaking things and
             | would rather more capable out of the box experiences so
             | they can benefit from features added to the core shell
             | without hunting for plugins.
             | 
             | I use Fish, however I also use Vim and do the plugin hunt
             | there. I enjoy it, but I'm glad to not be doing it for both
             | my environments.
        
               | kbd wrote:
               | Comparing the "plugin hunt" between vim and zsh is a bit
               | much. I use three for Zsh, just syntax highlighting,
               | autosuggestions, and fzf-tab. I don't use a Zsh plugin
               | manager.
        
         | user-the-name wrote:
         | zsh has this absolutely ridiculous case of feature shyness. It
         | has tons of great features, which it goes to great lengths to
         | hide from you for some indecipherable reason.
        
           | opk wrote:
           | The reason is to preserve compatibility for everyone's
           | configuration that they carefully built up over decades. It's
           | quite hard to change things to enable some new thing without
           | annoying many users. The last time that was tried was in the
           | '90s and there are still zsh developers around who
           | experienced the fallout. I value the fact that my shell
           | doesn't change on me without warning like many GUI desktop
           | environments.
           | 
           | In recent years the existence of frameworks like oh-my-zsh
           | has contributed further to this situation because it has
           | separated the detailed configuration from the base zsh
           | project. It's a pity omz doesn't enable more really. Many
           | things it does are not really useful unless you take the time
           | to actually learn them. A lot of plugins just define aliases
           | but if you don't know what they are, they just sit there
           | unused.
        
         | sprash wrote:
         | Many of the features are also achievable with pure bash with
         | ble.sh (https://github.com/akinomyoga/ble.sh).
        
       | BeetleB wrote:
       | xonsh is also worth a try. I've been using it for a few years
       | now.
        
       | jrm4 wrote:
       | Specific question for anyone who's gone from bash to fish (and
       | maybe back) -- Does the "only splitting on newlines" mess you up?
       | I've just been in bash _so long_ that I feel like this will get
       | me?
        
       | sandreas wrote:
       | Don't forget that if you use #!/bin/sh in POSIX compatible
       | scripts, you can configure /bin/sh to symlink dash shell instead
       | of bash or zsh. Dash will run scripts way faster (up to 4x)
       | because it is less feature blown...
       | 
       | This is the reason, why I try to prevent using bash/zsh exclusive
       | features in my daily use scripts.
        
         | nvllsvm wrote:
         | I use `#!/usr/bin/env sh` in my scripts to avoid having to
         | overwrite a systems defualt /bin/sh and whatever issues that
         | can result in. Instead, I have ~/.local/bin in PATH with dash
         | symlinked to ~/.local/bin/sh
        
       | jonfw wrote:
       | I used fish for a couple of years and really liked it. But I
       | recently learned that I can configure ZSH to have all of the same
       | auto-complete and plugins that I loved from fish. Now I have all
       | of the creature comforts I like, with POSIX compliance
       | 
       | I found that while fish has better syntax than bash for most
       | things, the hassles with incompatibility or unexpected behavior
       | brought me much more trouble than BASH's syntax ever has
        
         | jscheel wrote:
         | This is my problem as well. I've been using fish for quite a
         | long time, and I'm still frustrated by weird posix
         | incompatibility.
        
           | dangus wrote:
           | bass can be helpful for some of those posix issues:
           | 
           | https://github.com/edc/bass
           | 
           | Another random tip: python virtualenv generates a
           | activate.fish script that you should use instead of the plain
           | activate script.
        
             | emptysongglass wrote:
             | Bass has never worked for me, in any scenario. I'm curious
             | to see how you use it. I have never successfully been able
             | to feed it any bash script. At this point I suspect I'm
             | either holding it wrong or it is a thing that is invoked as
             | a thing that works without ever being used in earnest.
        
               | Macha wrote:
               | bass works for things you're meant to source. If the
               | script is not meant to be sourced, just run bash
               | yourscript.sh .
               | 
               | 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.
        
               | yourad_io wrote:
               | Hadn't heard of fnm before, thanks. Seems worth checking
               | out.
        
               | dangus wrote:
               | If your bash script has a shebang you shouldn't need bass
               | at all. Fish will read the shebang and just run your
               | script with bash.
               | 
               | 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.)
        
               | pxc wrote:
               | > If your bash script has a shebang you shouldn't need
               | bass at all. Fish will read the shebang and just run your
               | script with bash.
               | 
               | 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
        
           | lovelyviking wrote:
           | >I'm still frustrated by weird posix incompatibility.
           | 
           | Can you also share what are the most significant problems
           | with posix incompatibility for you? Why is it a problem?
        
             | mey wrote:
             | The one I see is really, all of Linux vs OSX/MacOS. And
             | which version of Bash is shipped by default.
             | 
             | Internally we have a boot strap run book
             | developers/operations to bring up either Windows/WSL or
             | MacOS to a consistent shell env.
        
         | mattgreenrocks wrote:
         | The best reason to choose fish over zsh is that everything
         | works so well out of the box that you stop messing with it.
         | 
         | I haven't tweaked my shell config in 7 or 8 months now.
         | 
         | This is a different mindset from the giant zsh configs, "plugin
         | managers" and other junk that is wholly irrelevant to using the
         | shell. You'd think that fish incorporating a lot of
         | functionality that zsh has would manifest as bloating fish,
         | but, IMO the reality is that zsh's "bloat" is pushed into user
         | configuration and the user is tasked with making it work.
        
           | bscphil wrote:
           | > The best reason to choose fish over zsh is that everything
           | works so well out of the box that you stop messing with it.
           | 
           | This is such an incredibly odd perspective to me. I use zsh
           | and have not touched my shell config in _years_. Messing with
           | configurations to get things working to your liking is a one
           | time thing. I don 't even use plugins.
           | 
           | On the other hand, if fish _doesn 't_ work to your liking out
           | of the box, and for many people it does not, there's no
           | "messing with it" that's possible. You are forced to give up
           | and use something else. Your reason to choose fish is only a
           | good reason if you already agree with every minute choice the
           | developers made and refuse to let you adjust.
        
           | NavinF wrote:
           | Another issue with zsh plugins is that they are incredibly
           | slow. Oh-my-zsh makes every terminal feel like it's running
           | on another machine over ssh
        
             | RMPR wrote:
             | And that delay when it updates itself is just the worst
        
             | pmarreck wrote:
             | I thought there was something in, like, Powerman10k or
             | something, which managed to avoid that issue?
        
               | kekebo wrote:
               | You probably mean powerlevel10k[0], although that's
               | mostly a replacement of powerlevel9k, which is only one
               | of the (theming) plugins that oh-my-zsh commonly handles.
               | 
               | As for a replacement for oh-my-zsh itself, I had good
               | experiences with zgen[1] but the fastest I've found is
               | zim-fw[2] which produces acceptable start times for
               | me[3].
               | 
               | [0] https://github.com/romkatv/powerlevel10k/
               | 
               | [1] https://github.com/tarjoilija/zgen
               | 
               | [2] https://github.com/zimfw/zimfw/
               | 
               | [3] https://i.imgur.com/mPPQuyh.png
        
             | smohare wrote:
             | This is the framework, not the plugins.
        
           | pxc wrote:
           | > The best reason to choose fish over zsh is that everything
           | works so well out of the box that you stop messing with it.
           | 
           | I've found that sometimes the opposite can be true (in a good
           | way!). At one workplace, I introduced Fish to some fellow
           | developers who until then mostly saw using the command line
           | as a strange, difficult, and unpleasant part of their jobs.
           | 
           | Once I got them started with Fish, they were happy enough
           | with default interactive behaviors, convenient documentation,
           | and simple scripting syntax that it encouraged them to do a
           | little more scripting, and eventually to customize some of
           | the aesthetic stuff by writing custom prompts!
           | 
           | It was pretty cool to see.
        
           | canjobear wrote:
           | I use fish. I haven't tweaked my shell config in 9 years
        
         | binarysneaker wrote:
         | Came here to say the same. The default zsh config in Kali has
         | some pretty nice autocompletions, which I've borrowed and use
         | on all my other systems.
        
         | ayushnix wrote:
         | I don't get why people expect POSIX compliance from fish. Your
         | interactive shell and your scripting shell can be, should be,
         | and often are, different.
         | 
         | I use bash as my default user shell, fish as the default shell
         | of my terminal emulator, and I write scripts for both POSIX sh
         | (dash and busybox ash) and bash. I end up using three different
         | shells with different purposes.
         | 
         | Sure, I could use zsh both as an interactive and scripting
         | shell but I don't have the time or willingness to configure it
         | when fish offers a nice out of the box experience. Not to
         | mention that zsh shouldn't be used as a scripting shell in the
         | first place.
        
           | Aloha wrote:
           | Exactly this.
           | 
           | I script in bash (though I'm super interested in oil), and
           | use fish as my interactive shell, it's pinned to screen 0 in
           | my screen session.
        
           | pxc wrote:
           | > Not to mention that zsh shouldn't be used as a scripting
           | shell in the first place.
           | 
           | Why not? If I'm writing scripts for automating configuration
           | on modern macOS, for example, where ZSH is installed by
           | default, why not write ZSH scripts?
        
         | GhettoComputers wrote:
         | I just start scripts in bash for compatibility at the beginning
         | or use scripts that state it, avoid scripting as much as
         | possible, and I spent a lot of wasted time with configuration
         | of zsh to get most of the functionality of fish but never as
         | good. What did you install?
        
         | rainingmonkey wrote:
         | POSIX compliance has never brought me any issues, if I want
         | bash syntax I just use `bash -c COMMAND`. You can invoke bash
         | scripts with `bash SCRIPT` or just add the bash shebang
         | `#!/bin/bash` to the top of your script, set the executable bit
         | and invoke directly.
        
         | Macha wrote:
         | Interestingly I moved from such a zsh setup to fish a couple of
         | years back. Zsh with add-ons was noticeably slow compared to
         | fish and syncing the config to all the devices I used.
        
           | ulzeraj wrote:
           | ZSH plus oh-my-zsh cd'ing into a git repo with large LFS
           | files will hang your shell even on very fast NVME storage.
        
             | xondono wrote:
             | That's the git plugin doing it's thing. You can fix it in
             | config but I admit is an annoying default.
        
             | ivank wrote:
             | I found that all I really wanted to show was the current
             | branch, which I do with https://gist.github.com/ivan/79de5e
             | 87210e8cf21e305bb4c30c436...
        
             | adrusi wrote:
             | You can get reasonable version control integration from zsh
             | without any kind of wild oh-my-zsh config. Most distributed
             | versions of zsh are compiled with vcs_info enabled.
             | autoload -Uz vcs_info         zstyle ':vcs_info:*' enable
             | git hg         zstyle ':vcs_info:*' check-for-changes true
             | zstyle ':vcs_info:git*' formats
             | "%{$fg[cyan]%}(%{$fg[green]%}%s %{$fg[blue]%}%r%{$fg[cyan]%
             | }:%{$fg[green]%}%b%{$fg[yellow]%}%m%u%c%{$fg[cyan]%})%{$res
             | et_color%} "              setopt prompt_subst
             | export PROMPT="%{$fg_bold[red]%}%n%{$reset_color$fg[white]%
             | }@%{$fg_bold[green]%}%m%{$reset_color$fg[white]%}:%{$fg[cya
             | n]%}%1~ \${vcs_info_msg_0_}%{$fg_bold[white]%}%(#.#.\$)
             | %{$reset_color%}"
        
         | saagarjha wrote:
         | zsh is not POSIX compliant and never had a goal of being POSIX
         | compliant. (Amusingly, I use bash and I can pretty much replace
         | "zsh" in your claim with "bash" and have it apply to my usage-
         | except in this case it would be true :P)
        
           | ch_123 wrote:
           | zsh has a POSIX compatibility mode, but it is not enabled by
           | default. (You can see some details in the release notes:
           | https://zsh.sourceforge.io/releases.html)
        
         | wirthjason wrote:
         | Any suggestions?
         | 
         | I've recent switched from vanilla bash to ZSH. I mainly use oh-
         | my-zsh and Power10k. Once again the defaults without much
         | customization.
        
           | Bayart wrote:
           | Slimzsh[1] is a very nice default configuration. Just a slim
           | prompt, fast-syntax-highlighting and some vanilla settings.
           | 
           | I keep a personal fork with a few added plugins (most notably
           | zsh-autosuggestions and ssh-agent). No need for a plugin
           | manager.
           | 
           | oh-my-zsh is way too bloated. But it's a nice repo if you're
           | looking for plugins and aliases.
           | 
           | [1]: https://github.com/changs/slimzsh
        
             | mattgreenrocks wrote:
             | The popularity of OMZ with the performance issues and
             | update nags really makes me wonder if people even notice or
             | care about those two things.
        
           | disk0 wrote:
           | zinit did wonders for my config, would highly recommend:
           | 
           | https://github.com/zdharma-continuum/zinit
        
           | animal_spirits wrote:
           | My only plugins are zsh-autosuggestion
           | (https://github.com/zsh-users/zsh-autosuggestions) zsh-
           | syntax-highlighting (https://github.com/zsh-users/zsh-syntax-
           | highlighting) and zsh fzf-tab (https://github.com/Aloxaf/fzf-
           | tab) its been wonderful using these plugins
        
           | anamexis wrote:
           | I prefer prezto to oh-my-zsh for performance reasons.
           | 
           | https://github.com/sorin-ionescu/prezto
        
         | [deleted]
        
         | dietr1ch wrote:
         | I moved from bash => zsh => fish. I wanted reasonable features
         | on my shell, and fish was much faster and needed almost no
         | plugins.
         | 
         | The fact that I can write a simple for loop without needing to
         | look up how to do it by far beats the POSIX compatibility, if I
         | need it I can still write a bash script, but when using the
         | shell I don't need to recall where semicolons or `do`, brackets
         | (and how many) go.
        
           | thibran wrote:
           | > I moved from bash => zsh => fish
           | 
           | Did the same, but moved on.
           | 
           | Now it is: bash => zsh => fish => nu
        
           | macromagnon wrote:
           | Is it that hard to remember a bash for loop?
           | for i in $(seq 1 10)       do echo $i       done
           | 
           | Then you can just replace new lines with ; if writing a one
           | liner.                 for i in $(seq 1 10); do echo $i; done
           | 
           | I guess it isn't as simple as python                 for i in
           | range(10): print(i)
           | 
           | but it's pretty close aside from the variable binding.
        
             | yesenadam wrote:
             | for i in {1..10}
        
       | jeppesen-io wrote:
       | I wish I could use fish, but I can't leave the fancy auto
       | complete of kubectl and git
        
         | EdwardDiego wrote:
         | Fish does git autocomplete out of the box, and there's a Fisher
         | plugin for kubectl autocomplete. Works great.
        
       | revscat wrote:
       | > Smart tab completion not only for the commands but for the
       | arguments as well, and it apparently does that by parsing man
       | pages.
       | 
       | And it does this every time you spawn a shell. So if you have set
       | your login shell to fish, then every time you launch a shell it
       | loads all the fish plugins like this one, and that slows it down.
       | And you can't turn it off, or couldn't the last time I checked
       | around a year ago. Insult to injury? The PR where this was
       | requested was closed by the devs as "wontfix".
       | 
       | This, and it's lack of POSIX compatibility, made me switch back
       | to zsh.
        
         | iamevn wrote:
         | do you have fish_update_completions somewhere that runs when
         | you start a shell? maybe ~/.config/fish/config.fish?
        
         | faho wrote:
         | >And it does this every time you spawn a shell.
         | 
         | It does not. The completion generation is on first start and
         | whenever you run `fish_update_completions`.
         | 
         | (note that the importance of man parsing is often quite
         | overstated, it only gets you so far, all the advanced
         | completion stuff is hand-written)
         | 
         | Source: I'm a fish dev.
        
           | pxc wrote:
           | On NixOS, we generate the completions on behalf of users at
           | install time, so they never have to see a slow startup at
           | all. Fish makes it easy to do! Thanks :D
        
         | pxc wrote:
         | > So if you have set your login shell to fish, then every time
         | you launch a shell it loads all the fish plugins like this one,
         | and that slows it down
         | 
         | Fish completions and functions are lazy-loaded, so this doesn't
         | happen unless you write your config to force it to happen.
         | 
         | Fish also provides you with functions you can use to check
         | whether a shell instance is a login shell, is interactive, or
         | is just being invoked as (part of a) script. If you do have
         | some heavy-duty stuff you want to run on startup for your login
         | shell or your interactive shells, you can do that selectively
         | and keep Fish startup for other purposes fast.
        
         | ilaksh wrote:
         | I have been using fish for years. I don't have those issues
         | because I just leave the default as bash and run the fish
         | command manually when I log in. Then if I have some
         | incompatibility (pretty rare) I can just type 'exit'.
        
       | thrwyoilarticle wrote:
       | Shells and scripting languages are different things. I don't care
       | how good of a scripting language Powershell is, it's painful to
       | use as a shell. I don't care that fish can't run sh scripts, I've
       | never used it on a machine that didn't have sh. Can we stop
       | judging oranges for their lack of crunch?
        
         | [deleted]
        
         | pxc wrote:
         | Ideally you do want them to be the same, so that the skill of
         | using one reinforces the skill of using the other, and you can
         | begin to shape scripts out of your shell history.
         | 
         | Output redirection doesn't work right with Fish functions,
         | which makes them unusable in certain kinds of scripts. Aside
         | from that, though, Fish is perfectly pleasant for simple
         | scripting. I use Fish for simple stuff and PowerShell for
         | anything serious. Some day I'd like to use something like
         | Elvish or Nushell for both, and use the same language as my
         | interactive shell.
        
           | buu700 wrote:
           | Agreed. I liked fish last time I tried it (probably over a
           | decade ago), but bash scripting is what I'm familiar with and
           | it's just so convenient in day-to-day usage to be able to
           | throw out one-liners for mundane things and then have them
           | permanently searchable in my history.
        
             | yourad_io wrote:
             | I thought Ctrl+R was cool but in fish you are always in
             | search mode! Start typing any part of your previous command
             | and hit up arrow!
        
           | MaulingMonkey wrote:
           | > Ideally you do want them to be the same, so that the skill
           | of using one reinforces the skill of using the other,
           | 
           | I've used several dozen shells, script languages, and
           | programming languages - and have needed to do within the
           | context of a single job. What's one more? For an interactive
           | shell I prioritize writeability, and for scripts I prioritize
           | readability and maintainability. These are often at odds -
           | not just in what I write, but in the syntax itself - and by
           | making my shell and script the same, I make middling
           | compromises resulting in a jack of all trades that is a
           | master of none.
           | 
           | I disagree that this is "ideal".
           | 
           | > and you can begin to shape scripts out of your shell
           | history.
           | 
           | It's been my experience that this is quite doable even when
           | the scripting language has different syntax than your shell.
           | Oh, sure, it's not as simple as Copy+Paste - but it's never
           | that simple. Even simple shell scripts inevitably end up
           | needing error checking, sanity checks, error messages, ...
        
         | ChrisSD wrote:
         | Eh. Tbh I'm find both powershell and unixy shells have their
         | advantages and warts. I'm not sure either is "better". Maybe
         | I'm just not a fan of shells in general.
        
         | emersion wrote:
         | It's pretty common to copy-paste POSIX sh one-liners, or
         | `source` a simple script. fish makes this annoying to do.
        
           | CGamesPlay wrote:
           | Actually, in the last few years this gripe has gone away, at
           | least for me. Once they added proper support for `VAR=val cmd
           | && othercmd`, I haven't run across any one-liners that didn't
           | work in fish.
        
           | joshmanders wrote:
           | The only issue I ran into this was when the one liners had
           | subshell syntax $(cmd here), and all I had to do was convert
           | $() to just ().
        
             | mattgreenrocks wrote:
             | AFAIK that will be remedied in an upcoming release.
        
           | shepherdjerred wrote:
           | I'll trade the occasional minor annoyance for the day-to-day
           | ease of use that fish provides
        
           | [deleted]
        
           | KptMarchewa wrote:
           | bash -c "PASTE_HERE"
        
             | adrusi wrote:
             | That's annoying when you have complex quoting in the pasted
             | script, but you can always do                   bash
             | PASTE_HERE         exit
             | 
             | Works for everything unless the pasted commands set
             | variables you want to use.
        
         | smoldesu wrote:
         | Yeah, I hear a lot of people throw shade at fish and then act
         | equally surprised when I don't run my scripts with it. Much
         | like Bash, Perl, Python or even ZSH by some respects, fish is
         | just another tool in my toolbox. It so happens to be the one I
         | default to though, which _for some reason_ sends people flying
         | off the handle.
        
       | desireco42 wrote:
       | It is typical HN that everyone is talking about Zsh and how it
       | isn't so bad. And you know what, I used it for a while long time
       | ago, and it is great. I even had config I could transport to
       | another machine when I need.
       | 
       | All that can't be compared with fish out of the box, which is why
       | I am using fish, it will be 10 or so years now. When I say use, I
       | mean that, I just use it, I don't spend time learning it's
       | obscure features, creating scripts etc, no, just use it.
       | 
       | I have alias list that I use to make myself productive and it
       | goes along with me to a new machine. Very slim and simple
       | configuration. That and Vim, but that is another story.
        
         | vorticalbox wrote:
         | where does one put an alias ?
         | 
         | i have a collection of them in my .zshrc that i would love to
         | use.
        
           | iamevn wrote:
           | they're just functions so they end up in files in
           | ~/.config/fish/functions/                 $ alias foo bar
           | $ function foo --wraps bar --description 'alias foo=bar'
           | bar $argv       end
           | 
           | these two are basically equivalent. you'll need to
           | $ funcsave foo
           | 
           | to make it persist. this will write foo.fish into that
           | functions folder.
           | 
           | there's also abbreviations like                 $ abbr --add
           | ll ls -lh
           | 
           | which expand as you type. ll won't end up in your history
           | because it's expanded before that.
        
             | tryptophan wrote:
             | Abbreviations are actually brilliant! So much better than
             | aliases. Long live fish.
        
       | cbzehner wrote:
       | I used Fish for several years before switching over to nushell a
       | few weeks ago.
       | 
       | Nushell takes the ideas behind Fish even further by incorporating
       | types other than strings and adding more built-in functionality
       | that's useful for your average command-line user.
       | 
       | I doubt I'll go back but both are great! Highly recommend Fish
       | and Nushell!
        
         | bobbylarrybobby wrote:
         | Does nushell have the same kind of autocomplete? That's what
         | really keeps me using fish
        
           | pxc wrote:
           | No, at least not out of the box, on Nushell 0.39.0.
           | 
           | Just tried it and there's no                 - out-of-order
           | tab completion       - preview with left/right arrow
           | completion       - case-insensitive/smart-case completion
        
       | londons_explore wrote:
       | > You can configure your shell using a web interface!
       | 
       | Think about that for a while.
        
         | mro_name wrote:
         | indeed, IMO the biggest downside - the (python-)heavy
         | underpinnings.
        
       | assbuttbuttass wrote:
       | Fish really shines in interactive use, like being able to write
       | fish_vi_key_bindings, and that setting is preserved after
       | restarting fish. Or using funced and funcsave to modify helper
       | scripts, or abbr -s ...
       | 
       | I'm not sure I've ever opened my fish config file, but I'm still
       | able to customize it easily
        
       | Ultimatt wrote:
       | Is no one going to comment on for *.pdf assumes no spaces in
       | filenames for the BASH example to be correct, what about Fish?
        
         | pxc wrote:
         | Fish doesn't do automatic word splitting on variable
         | substitutions like bash does. Like ZSH (afaik), Fish doesn't
         | require you to religiously surround every variable substitution
         | in double quotation marks in case the contents have a space.
        
         | moonchild wrote:
         | I do not know about fish, but it behaves correctly in zsh.
        
       | vasergen wrote:
       | I like software where you don't need to spend hours or even days
       | on configuration and it just works out of box. Unfortunately the
       | different syntax is no go for me. I have a bunch of scripts which
       | I can run on my local machine and remote interchangeably. Even if
       | syntax is better I want to learn rather `one syntax` that work
       | everywhere. But that is only one thing that prevents me from
       | trying it.
        
         | j4hdufd8 wrote:
         | Agreed. Wish there was a pretty shell like fish that used
         | /bin/sh under the hood.
        
         | jaredklewis wrote:
         | Maybe it's a personal quirk but all of my shell scripts have a
         | shebang (#!) header anyway.
         | 
         | I've used fish as my shell for years and still have so far
         | never written any shell scripts in fish. It may also be a nice
         | scripting language, but I personally use it because it's a
         | fantastic interactive shell.
        
           | tomxor wrote:
           | Mine even have a #!/usr/bin/env which I never shook due to
           | going back and forth between Linux and FreeBSD at one point
           | (bash isn't where you might expect).
           | 
           | I think i'd be up for trying out a new shell for my command
           | line, it's rare I use shell specific syntax heavily for one
           | liners... unless I just don't know it yet.
        
         | canjobear wrote:
         | Just invoke your scripts with sh or bash
        
         | Hamuko wrote:
         | Just add #!/usr/bin/env bash?
        
       | nojito wrote:
       | Fish is good, but most shells pale in comparison to powershell
       | unfortunately.
        
         | philipswood wrote:
         | PowerShell: Maybe the learning curve is steep or something, but
         | the times I've had to use it I disliked it.
         | 
         | I want to like it. It's goals and purposes seem to be in the
         | right place, but....
         | 
         | Nope.
        
           | [deleted]
        
         | pxc wrote:
         | PowerShell is definitely way more capable a scripting language,
         | but it pales in comparison to Fish when it comes to speed,
         | ease, and pleasantness of interactive use.
         | 
         | There's a new generation of shells on the rise which look up to
         | both Fish and PowerShell as models of different virtues they
         | want to embody. A lot of them are already usable, and some day
         | a few of them will be killer apps for developers and sysadmins
        
           | nojito wrote:
           | Nothing is speedier, easier, or more interactive than Get-
           | Help in Powershell.
           | 
           | https://docs.microsoft.com/en-
           | us/powershell/module/microsoft...
           | 
           | Using other shells is like living in the stone age. I don't
           | know why people would do that to themselves.
        
             | pxc wrote:
             | Get-Help is pretty good, but I don't like several things
             | about it:
             | 
             | 1. You have to go out of your way to fetch the full help
             | pages on a given PowerShell installation (they're not
             | stored locally by default).
             | 
             | 2. Even after you fetch the full help, not all of it is
             | actually included in the Get-Help output (IIRC examples),
             | so you often need to use `Get-Help -Online`, which opens a
             | separate application (browser) and that sucks
             | 
             | 3. Inside the terminal, there's little to no special
             | formatting or syntax highlighting, unlike what you get with
             | a good `man` pager
             | 
             | 4. Get-Help output (unlike `man` output as configured on
             | most distros) is not paged by default.
             | 
             | `man` could be better, and I don't really vibe with `info`,
             | but Get-Help isn't that great imo. The actual content of
             | the help is quite good, and it's nice that it includes
             | examples, but the same is true of most man pages.
        
       | emersion wrote:
       | > You can configure your shell using a web interface! Just run
       | fish_config
       | 
       | As much as I like the fish shell, I really consider this an anti-
       | feature. A TUI application to configure the shell would make much
       | more sense. The terminal emulator is your platform, not the Web.
        
         | octet1 wrote:
         | Wondering how it would function after being passed through
         | https://github.com/azproduction/html-tui
        
         | jvolkman wrote:
         | The web configurator is a practical feature. I just tried it
         | and it seems to work pretty well.
         | 
         | But you're in luck; looks like the next version will have
         | everything also configurable via text: https://github.com/fish-
         | shell/fish-shell/issues/3625
        
           | pxc wrote:
           | That's a CLI, not a TUI, but it is awesome that they've now
           | made the CLI configuration worflow feature-complete!
        
       | slifin wrote:
       | Fish is so good I think I'm using shellder and some other bits
       | 
       | But I just use it as a way to run commands, and I use dynamic
       | languages to create scripts just not bash..
        
       | pvaldes wrote:
       | > fish is not POSIX compliant, don't expect your previous scripts
       | to work at all
       | 
       | Extend, embrace, extinguish?...
        
         | purerandomness wrote:
         | fish never claimed to be POSIX compliant to begin with, so no.
         | There never was an 'extend' step.
        
           | pvaldes wrote:
           | But seems to want us to replace the old reliable shell with
           | it (Or this is what I understand). I see a lot of people
           | reinventing the wheel in Linux and trying to appeal the new
           | users. What you have in the end is normally worse than the
           | standard ones. Is just dissecting Linux in a lot of smaller
           | particles and smaller rooms.
           | 
           | So thanks, but not thanks. Not to me.
           | 
           | Wouldn't be much more practical to use all of those talent
           | and ideas to help to improve the extant bash shell instead?
        
             | Shared404 wrote:
             | Sometimes to improve on old ideas or develop new ones you
             | need to start over.
             | 
             | See plan9, RedoxOS, TempleOS, Gemini, etc.
             | 
             | None of these are currently in a position to gain
             | dominance, but they all explore a space that couldn't be
             | explored starting with a prior code base.
        
             | woodruffw wrote:
             | There are lots of "old reliable shells" that are POSIX
             | incompatible. (t)csh[1] is the first family that comes to
             | mind.
             | 
             | The EEE analogy is more applicable to GNU Bash anyways: it
             | extended the POSIX sh baseline with a bunch of GNUisms that
             | a lot of "POSIX" sh scripts now unintentionally use.
             | 
             | [1]: https://en.wikipedia.org/wiki/C_shell
        
               | adrian_b wrote:
               | I do not think that there are many GNUisms in bash, even
               | if indeed there are a few optional syntax variants that
               | should be avoided for compatibility with other shells.
               | 
               | In any case I am not aware of any GNUism that is actually
               | useful in scripts, so taking care to not use any syntax
               | variant specific to bash is not a problem.
               | 
               | All the important bash features that are not POSIX are
               | not GNUisms, but they are:
               | 
               | 1. The 50% of the new ksh 1988 features that have not
               | been included in the POSIX shell, e.g. condition testing
               | "[[ ... ]]" and arithmetic testing "(( ... ))".
               | 
               | 2. All the new features added by ksh 1993, none of which
               | have been included in POSIX, e.g. "for (( ... ))" and the
               | extra parameter expansions that replace the most common
               | invocations of sed or awk.
               | 
               | 3. The brace expansion from csh
               | 
               | 4. The extended brace expansion forms added by zsh (which
               | generate arithmetic progressions and are usually
               | preferable to "for ((...))")
               | 
               | Attempting to write POSIX-compliant scripts in 2021, i.e.
               | not using these extra ksh/csh/zsh features provided by
               | bash, is a huge mistake in my opinion, because without
               | these features any non-trivial script becomes much longer
               | and much more error-prone.
               | 
               | The Google recommended style for shell scripts
               | (https://google.github.io/styleguide/shellguide.html),
               | which is based on using all bash features, is pretty
               | decent. It is far less work to ensure that bash or
               | ksh/zsh exists on any target system than to maintain any
               | obsolete POSIX-compliant scripts (which are stuck to the
               | 1979 Bourne shell features + only half of what ksh 1988
               | has added).
        
             | oblio wrote:
             | > Wouldn't be much more practical to use all of those
             | talent and ideas to help to improve the extant bash shell
             | instead?
             | 
             | Yeah, good luck with that.
             | 
             | It's a garbage pile of code that creates an interpreter
             | with piles upon piles of undefined behavior that random
             | scripts out there in the world rely on.
             | 
             | I don't even think it was a working CI setup.
             | 
             | I'd be super glad to be proven wrong, maybe things have
             | changed in the meantime.
        
         | fiedzia wrote:
         | All your existing scripts will continue to work just fine.
         | #!/usr/bin/bash
        
           | unixhero wrote:
           | Yeah, I mean they have the hashbang.
        
         | junon wrote:
         | Fish is not a company, either. Also, competing standards is not
         | an example of EEE.
        
       | garciasn wrote:
       | More and more often, I am getting the following error:
       | 
       | Malware and Phishing
       | 
       | This site is blocked because it is a known security threat.
       | Please contact your network administrator to gain access.
       | 
       | My assumption this is because I have Xfinity Business Class and
       | it's blocking the site. But why would I be seeing this so often
       | on a site linked from HN?
        
         | cpach wrote:
         | It could be that the web filter in question has no info about
         | the site rmpr.xyz, and therefore gives it an unfavourable
         | score.
         | 
         | You might want to reach out to Xfinity support, or bypass their
         | filter using a VPN or proxy.
        
         | vorticalbox wrote:
         | maybe the .xyz domain?
        
       | ribit wrote:
       | I really love fish and the philosophy behind it, especially the
       | "configurability is the root of all evil" attitude. Makes for a
       | well though out software that is a true pleasure to use.
        
         | ziml77 wrote:
         | I love that philosophy too. If there's too many knobs to turn
         | I'm going to constantly fiddle with them. The only things in my
         | config.fish are calls to scripts to setup iTerm 2 integration
         | and the Starship prompt.
        
       | craigkerstiens wrote:
       | Strongly agreed here, it really just works. Sure you can get the
       | same with zsh but the hours of my life I've spent tweaking and
       | tuning zsh I'd happily give back because fish is good enough.
       | 
       | When we built our CLI for Crunchy Bridge it was a couple lines to
       | add tab completion to the CLI when running in Fish
       | (https://blog.crunchydata.com/blog/introducing-the-crunchy-
       | br...), love that when building such tooling giving a better end
       | user experience was so simple.
        
       ___________________________________________________________________
       (page generated 2021-11-25 23:00 UTC)