Live data from Hacker News

Zshell

zsh.org

31–37 of 37 posts

Re: Zshell

#31
post #5

Earlier quoted context omitted.

Personally, I don’t have a reason to move from bash. Bash, zsh, fish looks very similar to me. But they do have subtle differences that require learning. And I don’t see a point.

The only reason I moved to zsh is because I'm lazy, and macOS ships with it by default. Easier to change my other systems to zsh than fight it, but I've not really done anything different except some minor notices that it seems to autocomplete a tiny bit better (but that may be due to oh my zsh).

Yeah. That move was annoying. I wanted to start using zsh as well but then found I need to port by bashrc and switched to bash back

Re: Zshell

#32
post #9

Somewhat related is "Oh My ZSH!" which is basically zsh on steroids, it's always one of the first things I install on a new computer. It gives things like new colors, themes, plugins, and more. Highly recommend you check it out. https://ohmyz.sh/

I used OhMyZsh! for a long time and really liked it, but now I moved to Starship [1]. However I noticed I still missed some of the "steroids" that OhMyZsh brought so I keep it installed in my system and I only source the plugins I need in the .zshrc:

  source /usr/share/oh-my-zsh/lib/completion.zsh
  source /usr/share/oh-my-zsh/lib/directories.zsh
  source /usr/share/oh-my-zsh/lib/history.zsh
  source /usr/share/oh-my-zsh/lib/spectrum.zsh
  source /usr/share/oh-my-zsh/lib/key-bindings.zsh
[1]: https://starship.rs/

Re: Zshell

#33
post #22

Do people script in zsh?

Zsh is quite a bit nicer than Bash for scripting. For one, parameter expansion doesn't word-split by default, so you don't have to haphazardly quote everything. There's also some really powerful features, like the parameter expansion flags [1] and filename generation (globbing) flags [2] that can be combined to do very flexible things. [3]

Zsh also bundles a ton of useful modules that can be used to do things pretty outside the box. Eg, there's a module for creating and controlling a hidden PTY. [4]

Zsh also has some quite nice shorthands for basic grammar, like compact loops and conditionals. Eg, you can do:

    for foo in bar*;
      do_stuff # you don't need the do..done here for single-line for-loops
Also, while Zsh diverges from POSIX sh in some areas (like word splitting), Zsh has sh- and Bash-compatible emulation modes, which can even be mixed together within single scripts (eg functions can set their emulation mode and shell options locally, or files can be sourced or commands run with different emulation modes prefixed). [5]

Lastly, Zsh has this weird reputation for being slow, because the configuration frameworks like oh-my-zsh are absolute dogs. But it's actually among the faster shells, with very respectable script performance that's squarely ahead of Bash. [6] Interactive performance can also be fantastic if you use a less hungry framework or write your own config, and Zsh has many tools to improve speed further, like support for pre-compiling source files [7] and pretty good support for async workers. [8]

Zsh has also been around about as long as Bash, and runs on every major platform and is available in just about every platform's package manager. So the cliche about Bash being available everywhere is just as true for Zsh. Zsh is honestly a much better replacement for scripting, but Bash benefits from already established traction and by being the default shell on most Linux distros.

[1] https://zsh.sourceforge.io/Doc/Release/Expansion.html#Parame...

[2] https://zsh.sourceforge.io/Doc/Release/Expansion.html#Globbi...

[3] https://thevaluable.dev/zsh-expansion-guide-example/

[4] https://zsh.sourceforge.io/Doc/Release/Zsh-Modules.html#Zsh-...

[5] https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Command... (see 'emulate' command)

[6] https://towardsdatascience.com/comparing-sh-bash-ksh-and-zsh...

[7] https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Command... (see 'zcompile' command)

[8] https://github.com/mafredri/zsh-async as an example, but also doable in bare Zsh

Re: Zshell

#34
post #25

With bash and all of it's improvements over its' predecessors and rivals (csh), I'm not sure what need there is to throw resources at new shells such as zsh and fish etc? [pulling my tongue out of my cheek, I honestly never have found a reason to use anything other than bash -but that's just me]

Bash and Zsh are both just about as old as one another. Zsh came out less than a year after Bash.

Both derive most of their improvements from ksh, which is why they look superficially similar and many scripts are cross-compatible. Zsh arguably took the language improvements much further than Bash, ie look at [1] and [2] in https://news.ycombinator.com/item?id=39642678.

Bash made the understandable but very regrettable decision of being only a superset of POSIX sh, which means it carries along all the footguns, like word splitting by default.

Zsh is also eminently flexible and scriptable, with many core features (like most line editor functionality) exposed as hooks that custom scripts can extend or change.

Zsh is also notably faster than Bash.

It's one of the great disappointments of open source history that Bash largely took off as the default shell everywhere and the default shell scripting language, despite Zsh being superior in just about every way.

Re: Zshell

#35
post #2

Needs a (1990) tag. It always amuses me when people, to this day, say "eh, not going to use that newfangled zsh, bash was good enough for my forefathers and is good enough for me" - not realizing zsh was released less than a year after bash.

Personally, I don’t have a reason to move from bash. Bash, zsh, fish looks very similar to me. But they do have subtle differences that require learning. And I don’t see a point.

I don't think zsh requires any learning as it's mostly adding to bash and is compatible, no?!

In any case, fish offers all the conveniences out-of-the-box, which makes it superior to zsh, to me. It's just a nice and ready drop-in, no configuration required. Like, I can't live without alt-H to pop open the man page for command at cursor, and alt-S to toggle sudo, anymore. Otherwise, for 95% of my use, the differences are unnoticeable, and if I need the arcane bash hacks, well, I drop into a bash shell. Tho, I do miss the <<< and still use bash for scripts. Also, I don't have fish set as default shell outside of the GUI terminal.

Re: Zshell

#36

Earlier quoted context omitted.

> It's rare for bash to complete anything but filenames. zsh gives me subcommands and flags with descriptions. I think that hasn't been true for a very long time, although it might be that I'm biased because I've been installing the "bash completion" package alongside bash on all my systems. (In my case "apt-get install bash-completion".) bash typically completes commands, sub-commands, flags, and file/directory name…

I have tried bash-completion and it doesn't make much of a difference. It's already underwhelming that bash requires third party completion frameworks to get completion working beyond command names, variable names, and filenames. But even with bash-completion, completion for the most common commands are either missing or incomplete. Take grep, for example. I only get --binary-files, --context, and --null. That's only…

Your reply suprises me, when I run "grep --[TAB]" I go a whole bunch of flags.

I'd probably suggest that bash-completion being a "third party" package is a good thing, it's entirely external to the bash project and that's good. It means we're not pinned to releases alongside the shell. After all it has support for ssh, grep, and many more tools they should be able to contribute to one location and the shell-project itself would be thee wrong one.

bash completion provides a framework for adding completion to "stuff", and the git-package on Debian uses that to drop a file into `/usr/share/bash-completion/completions/` so there's no need for any other third party framework:

1. Install git 2. Install bash completion package 3. Everything should just work.

Anyway I guess a lot of this will depend on the system you're using, and how their packages are configured, but I don't personally believe that bash completion is in a terrible state.

Re: Zshell

#37
post #3
post #2

Needs a (1990) tag. It always amuses me when people, to this day, say "eh, not going to use that newfangled zsh, bash was good enough for my forefathers and is good enough for me" - not realizing zsh was released less than a year after bash.

I tried to give zsh a shot as a bash replacement but ultimately returned to bash. My main pain point was that zsh was really difficult to configure out of the box and a lot of the completions were much slower (cpu/wall time) than the equivalent completion in bash. I'm sure some of that was simply ignorance on my part.

It still boggles my mind how CLIs are slow as molasses even on high end PCs. I will never understand.
Post reply on HN