[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)