The fact that you cannot redirect stderr to stdout and pipe to another command is a bit of a stumbling point for me. When I saw the bug[1] for the first time I thought that it must be some strange corner case, but it turns out it is a real bug. After reading the bug report I started to wonder if there were any other other unixy features that were missing. I/O redirection is a core unix concept in my opinion.<p>[1] "Redirect stderr to stdout and pipe doesn't work as expected" <a href="https://github.com/fish-shell/fish-shell/issues/110" rel="nofollow">https://github.com/fish-shell/fish-shell/issues/110</a>
I've been using fish for a while now. Overall it's pretty great.<p>Here's my fish config if you want to see an example: <a href="https://bitbucket.org/sjl/dotfiles/src/tip/fish/config.fish" rel="nofollow">https://bitbucket.org/sjl/dotfiles/src/tip/fish/config.fish</a>
I tried fish, last time it was posted. I quickly abandoned it though.<p>One of my main commandline utilities is git in combination with git-flow(amazing).
I found the normal git completion lacking. I believe branches didn't get completed correctly in combination with some commands. The git-flow completion was non existent.<p>When that changes I might try it again. But for a shell that has tabcompletion as a selling point I was very unimpressed.
One of my favourite features: a single configuration file. No more .bashrc and .bash_profile .<p>However, it seems like Fish is not fully POSIX-compatible, therefore you can face weird problems in Vim plugins, for example.
For people that just don't care about advanced features or gotchas, fish seems fine.<p>For people that exploit redirection, file handle rewiring, here docs and such... consider zsh with <a href="https://github.com/sorin-ionescu/prezto" rel="nofollow">https://github.com/sorin-ionescu/prezto</a>
I like the features it has, but every time someone post a link to fish shell, I wonder why I would switch from bash or zsh. Will this really be THAT MUCH BETTER? Will I just run into weird errors? Is it totally sh compliant? These are important things to know and should be on the homepage.
I really liked fish, but as someone who is still learning bash/cli scripting, it makes things difficult when instructions from programs come only in Bash syntax, which does not work well with fish (some things with homebrew were an absolute nightmare to install).
I've been using fish for a while and have generally been very happy, I'm even working on creating a set of functions for ROS to integrate with fish the way it currently does with bash and zsh. My one tiny gripe is the way that if I<p><pre><code> set foo this that "the other"
</code></pre>
then<p><pre><code> echo $faux; echo $faux[1]
</code></pre>
doesn't produce anything, but<p><pre><code> echo $foo[4]
</code></pre>
gives me an error message that I can't just pipe to /dev/null<p>Also, writing autocompletes for functions is both far simpler than in bash, but I'm also missing some of tools that bash provides.
Why is this interesting when we have zsh?<p><a href="https://github.com/robbyrussell/oh-my-zsh?source=cc" rel="nofollow">https://github.com/robbyrussell/oh-my-zsh?source=cc</a>
Fish is a great interactive shell. I've been using it for some time now.<p>A few things I occasionally run into: You can't just paste somebodies setup instructions into your shell anymore (you can temporarily invoke bash for that though). And when writing setup instructions yourself, sh is still pretty much the standard. VirtualEnv generates an activate.fish out of the box - nice! I still occasionally type !grep by accident. And I do miss &&.
I defined the following function to convert my bash aliases to fish functions, which eased my switchover a bit. I saved it as ~/.config/fish/functions/import_bash_aliases.fish<p><pre><code> function import_bash_aliases --description 'bash aliases to .fish function files.'
for a in (cat ~/.bashrc | grep "^alias")
set aname (echo $a | grep -Eoe "[a-z0-9]+=" | sed 's/=//')
set command (echo $a | sed 's/^alias .*=//' \
| sed 's/^ *\'//' | sed 's/\' *$//' )
echo "Processing alias $aname as $command"
if test -f ~/.config/fish/functions/$aname.fish
echo Function $aname is already defined. Skipping...
else
alias $aname $command
funcsave $aname
end
end
end</code></pre>
I have been using fish for a few months exclusively on my Mac. I really miss a few bashisms: mostly pressing esc-. inserts the last part of the last command. I have not changed the shell on my server, somehow I am afraid of breaking things... (bad shell scripts that don't have correct shebang line).
I just took fish for a quick spin, and... wow -- I am impressed. It really feels "interactive". I don't think I'll replace my battle tested zsh, but even as a "grumpy old man": you should at least try it. It feels really... fresh.
One thing I missed in fish was bash's sudo !! to quickly re-execute a command.<p>A replacement is easy enough though and is in my config here:
<a href="https://github.com/dmotz/dotfiles/blob/master/functions/sudo!!.fish" rel="nofollow">https://github.com/dmotz/dotfiles/blob/master/functions/sudo...</a><p>Beyond a few other syntax incompatibilities, I've enjoyed using it.
Gave fish a shot for a week or so. It gives some "oohs and ahs" right off the bat, but in the long term, not something that I could use.<p>Maybe if it was at least somewhat bash or POSIX compatible I would be on board, but the developers don't even seem to want to help us out in that regard.
I've been using fish for about 3 months now and I love it. Switched from bash.<p>Here's a presentation I gave to my local coder community on fish: <a href="http://www.youtube.com/watch?v=SWmKfb2jQhU" rel="nofollow">http://www.youtube.com/watch?v=SWmKfb2jQhU</a>
"Finally, a command line shell for the 90s"<p>Now that's an odd slogan. Is it trying to make the point that the competition is even older? Appeal to old-school hackers? Subtly tell me that the project hasn't been updated in a while?
I like auto-complete in web-browsers, but I can't see a single use for it in my terminals.
After all, what Linux-user hasn't automated their terminal input to some degree? Nah, I'll stick with my [TAB]...