Many Linux users spend a considerable amount of time using the command line interface, so the right shell configuration can make them much more productive.
I think the best way to get an idea is to look at feature lists for fancy shells like zsh or fish. But in short there are a number of things a good shell can do to help to execute commands faster and more easily. Stuff like autocompletions which make you faster, and also make things more discoverable; fuzzy searching/matching; navigating command history; syntax highlighting which helps to spot errors, and helps to understand the syntax of the command you’re writing.
I use fish mainly just for the quality of life increase that its predictive features and command history give. I also really like that it uses functions to play the role of aliases, and it’s super easy to write and save new functions on the fly.
That said… I haven’t put in the time to really learn its nuances and I still write shell scripts using bash. Maybe I’m doing it wrong, but it works for me.
You can do most things by combining simple cmdline tools. E.g. filter out some specific lines from all files in a directory, get the value after the second :, write those to another file and then sort, deduplicate and count them.
This may sound complicated, but it’s pretty easy and fast if your are familiar with a shell. To be that efficient with your shell you want it to actually be powerful and not just a plain text input. Also writing cmdline tools is rather easy compared to a usable GUI tool.
That’s what I meant, using your shell to run command line tools to solve your issue at hand. And having a powerful shell with e.g. context dependend autocomplete (and a lot more) helps to speed up that task.
This may be the wrong place to ask, but what am I missing about shells? Other than executing commands, what do you do with them?
Many Linux users spend a considerable amount of time using the command line interface, so the right shell configuration can make them much more productive.
I think the best way to get an idea is to look at feature lists for fancy shells like zsh or fish. But in short there are a number of things a good shell can do to help to execute commands faster and more easily. Stuff like autocompletions which make you faster, and also make things more discoverable; fuzzy searching/matching; navigating command history; syntax highlighting which helps to spot errors, and helps to understand the syntax of the command you’re writing.
I use fish mainly just for the quality of life increase that its predictive features and command history give. I also really like that it uses functions to play the role of aliases, and it’s super easy to write and save new functions on the fly.
That said… I haven’t put in the time to really learn its nuances and I still write shell scripts using bash. Maybe I’m doing it wrong, but it works for me.
You can do most things by combining simple cmdline tools. E.g. filter out some specific lines from all files in a directory, get the value after the second
:
, write those to another file and then sort, deduplicate and count them.This may sound complicated, but it’s pretty easy and fast if your are familiar with a shell. To be that efficient with your shell you want it to actually be powerful and not just a plain text input. Also writing cmdline tools is rather easy compared to a usable GUI tool.
Genuine question: why not use grep, awk, sed, or any of the other gnu tools that can already do that?
That’s what I meant, using your shell to run command line tools to solve your issue at hand. And having a powerful shell with e.g. context dependend autocomplete (and a lot more) helps to speed up that task.