Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm just gonna use fish because I can't be bothered to setup zsh.


From the article... > P.S. maybe fish is even better by the way, but I could never get over the bright colouring and all these things popping in and out of my screen; it's such a "busy" chaotic experience! I'd have to spend time disabling all that stuff to make it usable for me, and I never bothered – and if you're disabling the key selling points of a program then it's probably not intended for you anyway.

I have no idea what "things popping in and out of my screen" could possibly mean. I use Fish and it's a beautiful, calm experience.


It does all these "autocomplete" things; for example I type "ls" and then I automatically get "| less" after that (why "| less"? Not sure), also the colours of the text of what I'm typing is constantly changing based on what I typed.

I appreciate that some people really like this sort of thing and that great, but it's not for me – I find it very distracting and "chaotic". Completion is brilliant, but I only want it on-demand (same with autocomplete when writing code).


>why "| less"? Not sure

Pretty sure it's autocompleting the last thing that you executed that started with "ls".


That's exactly what it's doing.


Not sure where it's getting that from, because I installed fish just for that comment and I don't recall running it any time recently (not for years), and even after deleting all "fish" related things I can find in my ~ it keeps doing it, hmm...

Anyhow, doesn't really matter shrug.


Fish is really great for an interactive shell, I love using it. Not so great when it comes to scripting though. For example I think there's still no way to easily exit a script on error except to manually check exit codes.

However I haven't tried writing scripts in zsh yet, just sh/bash.


I couldn't possibly use a shell that wasn't also a decent shell script. It seems my natural progression is always:

1. "Hand written" commands in shell

2. Shell script with copy-pasted commands from interactive session

2b. Evolved shell script with getopt. Complexity level beginning to tickle the spidey sense that it's too big.

3. Node.js script (I can write Python but JS seems infinitely nicer)

fish would break the 1->2 transition, sending me straight to 3 before I've really gotten a handle on the problem domain.


Perhaps it's just personal preference, but in what world is JS "infinitely nicer" than python?


I'm really far from a JS fanboy, but Python's whitespace thing really is annoying enough that I avoid it when possible.

Ruby'd be my pick for "most-pleasant scripting language" so long as I can avoid any libraries/frameworks that do too much metaprograming "gee, wouldn't you love to never be able to track down where this is defined?" crap. Maybe Lua, but deps are a bit of a pain to manage there, and it's a huge step down in third party library availability compared with the other three languages here mentioned.

Really, if not for up-to-date library availability being higher in other languages, I'd probably still be using Perl for everything. It feels more "command-line native" than the other options. Installed everywhere. The community's not too in-love with trendy, cute bullcrap. A project you wrote five years ago will probably still run fine with no effort. It's kinda like supercharged bash with way fewer footguns.


I've been seeing a lot of pro-perl comments here on HN. Never used it myself, may have to check it out.


Beware that it was created at a time when many programs were written in plain text editors, with no syntax highlighting or autocompletion, with the printed-book language manual on your desk, on a screen that could legibly display only a small fraction of the text that a modern display can (or even ones that came along a few years later). Hence: sigils for variables (though unlike PHP these make some sense and are actually used to do things, and aren't just there because... well, because Perl did it, so PHP should too, I guess); single-character magical variables for very commonly-used loop- or input-related variables; et c.

I don't think anyone would make something quite like it these days, starting form scratch.


Sorry, I didn't mean to start a flame war. I find regexes, HOF, and especially asyncio/Promises much more palatable in JS, which are things I look forward to when moving out of shell scripting land.


Nothing precludes you from using bash scripts even if ysit fish interactively. Just set a shebang in the script, or run it with bash script.sh.

That said, personally, for anything more involved than a one-liner alias kind of script, I turn to python, or PowerShell on Windows.


> for anything more involved than a one-liner alias kind of script, I turn to python

I agree with this. If you can trust your users to have python3 in their environment, I don't see a good reason to use sh/bash instead of python. Non-trivial shell scripts are unreadable to me, and the semantics are too different from normal programming languages.

The only scenario I can see is a script that has to call multiple commands over and over, which can be a pain in python if you're piping a lot of stuff and all that. No, piping grep to cut and sed doesn't count; you can do that in python itself.


> If you can trust your users to have python3 in their environment, I don't see a good reason to use sh/bash instead of python

You would need to ensure said users have all the pip dependencies your python script imports as well. shell scripts don’t have that issue unless you’re calling some external program that isn’t installed.


>shell scripts don’t have that issue unless you’re calling some external program that isn’t installed.

Good thing that bash has such an extensive amount of standard libraries and that you're almost never calling external programs? And unlike Python, which is seemingly almost exclusively calling third-party libraries from PyPI?


> That said, personally, for anything more involved than a one-liner alias kind of script, I turn to python, or PowerShell on Windows

You and submitter (who according to CV is proficient in Python) might like Oilshell.


I made dash my sh and started writing shell scripts targeting it instead of bash. If there's some bash-ism that can't be elegantly expressed in POSIX sh, it's time to bring out something like Python.


zsh can be a real pain to setup if you want a "performant" git status in your prompt. vcs_info is just too damn slow.

I prefer minimal customisation and so tend to stay away from heavy plugins like ohmyzsh, though I have friends who use it and really like it.


https://github.com/romkatv/powerlevel10k claims to do this (and other things) while remaining extremely fast (apparently the dev was aiming to keep it below the threshold of human perception; not 100% sure that extends to all features or not)


For those not using zsh, https://starship.rs/ is an excellent shell prompt which works with several shells.

Using it is very high value-for-effort.


Use https://starship.rs/ and get a performant prompt that stays the same when you switch between bash, zsh and fish.


I suppose that's the nano equivalent:) And that's not the insult you might expect: It sometimes is viewed as a toy, but it actually has depth and does a lot more than one might expect, all while staying very user friendly, albeit at the expense of being rather different than the other major options.


One still needs oh-my-fish, as one needs oh-my-zsh. So the setup time is 100% equal for fish and zsh.

https://github.com/oh-my-fish/oh-my-fish

https://github.com/ohmyzsh/ohmyzsh/ , https://ohmyz.sh/


Despite the similar names, what oh-my-fish and oh-my-zsh provide isn't comparable.

E.g. oh-my-zsh adds a bunch of keybindings and a git prompt, and sets a bunch of options (like turning on history deduplication, or comments in interactive sessions).

Fish already does equivalents of much of that, by default, so oh-my-fish doesn't have to do it. They mostly add more prompts (with their own, separate, git prompt implementation) and provide a package manager.

That means fish without oh-my-fish is already close to the experience of zsh with oh-my-zsh.

(disclaimer: I'm a fish developer, and not really involved with oh-my-fish - I sent a few courtesy patches over the years)


I very strongly disagree that you need or even want OMZ. You don't need it for Bash, why would you need it for Zsh?

It might be nice when you're getting started, so you don't have to learn all the ins and outs of the shell to have cool prompts and other useful functionality.


    ~ > omf
    fish: Unknown command: omf
Apparently one does not.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: