I’ve done something similiar to this over the years for organization purposes and not having to change much between shells except add a path. You can also add cases that check your shell and do something slightly different if needed.
I have never heard of anyone using aliases for anything but trivial one-liners. I don’t think people consider them as an alternative to scripts so I don’t really get the point of half of this post.
However, the part explaining the benefits of using scripts over aliases even for trivial one-liners is pretty neat.
I use aliases for renaming commands and making bash scripts look like real commands to the rest of my team.
That’s an anti-pattern if I’ve ever heard of one.
Which one?
Using aliases to rename commands.
Why not make them executable and stick them in bin
Mostly because there’s a profile everyone sources that’s relatively straightforward to that’s straightforward to get access to. Whereas I’d never get root level access.
You don’t need root level access though. What I usually do is stick a
PATH="$PATH:$HOME/.local/bin
and then place all the scripts in there.Wouldn’t that require me to have access to everyone’s home directory and need to dump the scripts in everyone’s?
Potentially I could set up an alt bin directory everyone has access to and configure that in the shared profile, the only drawback there is it might be less obvious whats going on if something breaks and someone else needs to take a look at it.
Functions are best for this.
I agree. My
.zshrc
is littered with functions. Most useful ones are mypack
andextract
I made ~10 years ago, they just recognize file extension and use the correct tool.
I like fish abbreviations. They are like aliases but expand when you press space or enter. That way you can edit it, and also still see the full command so you are less likely to forget it when you don’t have your aliases. Of course I have some scripts as well.
I use ZSH with plugins but back when I switched away from bash, I also looked at fish. I didn’t use it back then because people say it doesn’t follow the POSIX standard but is that really an issue? It probably only extends it instead of taking things away, right?
No issues except that if you want to source files to set env vars you might have to use a plugin (foreignenv in my case)
I still write scripts in bash. But fish’s command completion is incredible. Idk, maybe other shells can be that good as well, but fish does out of the box.
Edit: Also some people used to bash wondered what that nice shell is on a server we administrate together. They had no problems using it coming from bash.
And sticking with POSIX is good if you want to stay portable, but my shell mustn’t be portable. It should be friendly and reduce mental load.
Unless you have a particular reason for sticking to POSIX, who cares? I’ll take the user experience improvement without worry.
The thing is that, if you are not sticking to POSIX, you might as well use more widely available alternative scripting languages like perl or python, which are often included in most workspaces by default, so I’d say it’s more useful to get experienced in those than to get experienced in fish.
I still write most scripts for bash, but for interactive use fish is just so much better out of the box.
All POSIX compatible shells have their quirks and differences because the common POSIX part is rather small, so you will need to learn them anyway when switching from one to another. Fish is not that different from them (to much less extent than something like nushell) and it benefits from having less ancient baggage.