When I starting my command line journey, I was using a HP-UX workstation, and tcsh was the default shell. I was happy enough to use it with /bin/ksh as a scripting shell. I looked at a colleague’s ~/.kshrc and was baffled by the huge number of tiny functions.
A subsequent job landed my on Solaris and Linux machines. This is when I started using bash and really getting into the weeds of configuring the shell to my taste. This included creating aliases and functions for the tcsh commands which stuck in my brain (
alias where='type -a')
A few years ago I learned about fish. It’s a really nice interactive shell: autosuggestions when you start typing a command, web interface to select a theme, almost everything is tab-completable, very fast. As a scripting language, it’s not a POSIX shell, so there’s a learning curve, but as an interactive shell it’s great.
I’ve never taken the time to learn zsh. I find even finding stuff in a man page is challenging.
Has anyone jumped into the more esoteric shells?
A poll: Your Interactive login shell
- other (add a reply)
I know a lot of people appreciate the modern features of other shells, but when I write shell scripts, they are all
bash. As such, that’s what I’m most comfortable using and what I stick to for my shell.
For every day use I’m a fan of
zsh with a p10k prompt and some additional scripts for nice nixOS integration as well as live syntax highlighting on the terminal.
For scripting I usually use bash, as I can easier assume it’s available everywhere.
I do the exact same thing that @IsaacG does! Bash has suited my purposes fine. I also don’t do any real fancy stuff with my shell, so
I use bash everywhere also, with a nice prompt customized easily by powerline-go and my dotfiles managed by yadm
Would Command Prompt or PowerShell be considered an interactive shell? By hours spent remoted into work, that’d surely be my main shell. At home, I just use my Mac’s default zsh.
I would say that PowerShell kind of has the hint in the name, and it is interactive. I don’t have access to a Windows machine, but when you use it, if you check the variable
$SHELL it is probable that it will say something to indicate that you are using that shell, if you indeed are.
I do not know what the command prompt would say, but I would probably check the same environment variable.
Regardless, though, my answer would be “yes” for both of them, even though I have not used either for 2 decades ore more, now.
I’m not sure if I would count the command prompt, as it really just is a command prompt and more complex stuff is not really possible.
PowerShell though is clearly a shell in my opinion, not just because it is named “shell”, but because you can actually use it to adhoc script some things together, this is what makes a shell a shell in my opinion.
Also: You can even use PowerShell on Linux for some years now and if you really want to, you could make it your users default login shell.
Batch files are really just scripts of
cmd commands. In my codebase at work, I inherited a 1,160 line batch file, so brutal. I find
For particularly diabolical.
In the What *old* programming languages are you enthusiastic about? topic, I was truly shocked to be reminded that “Batch Script” was invented the same year as Ruby. How can two such disparate creations be the same age?
I started with CP/M’s command line, followed by MP/M’s, then the VAX/VMS command line (with its programming language DCL – DEC Command Language), MSDOS, sh, bash, powershell, plus dabblings with zsh, fish, nu and tabby. Currently my mainstays are CMD.EXE and bash.
You can tell my OS bias: I didn’t think to include cmd or pwsh in my poll.
Well… Windows user here Sorry for your OS bias, @glennj
I am using a combination of
Windows Terminal and
Oh My Posh and it works pretty well for my current usage
Never heard of
Oh My Posh and that looks pretty sweet. Thanks for the heads up.
I used to use bash, but since a few years I use zsh which offers some pleasant advances. e.g. TAB completion with a menu , navigation between options with TAB and the extended globbing option.
I’m typically in a
Bash for a declarative environment that has all the tools I need temporarily installed for the task at hand. As an aside, I’m also rather blown away every time I ssh into my similarly configured headless NixOS RPi with Flakes enabled and Direnv’s
use flake setting workspace environments up for me.