My question is whether it is good practice to include a unique wrapper phrase for custom commands and aliases.
For example, lets say I use the following command frequently:
apt update && apt upgrade -y && flatpak update
I want to save time by shortening this command. I want to alias it to the following command:
update
And lets say I also make up a command that calls a bash script to scrub all of of my zfs and btrfs pools:
scrub
Lets say I add 100 other aliases. Maybe I am overthinking it, but I feel there should be some easy way to distinguish these from native Unix commands. I feel there should be some abstraction layer.
My question is whether converting these commands into arguments behind a wrapper command is worth it.
For example, lets say my initials are "RK". The above commands would become:
rk update
rk scrub
Then I could even create the following to list all of my subcommands and their uses:
rk --help
I would have no custom commands that exist outside of rk
, so I add to total of one executable to my system.
I feel like this is the "cleaner" approach, but what do you think? Is this an antipattern? Is is just extra work?
an easier approach to start with would just be to namespace them all with your initials when you set them as aliases, like
rk-update
,rk-scrub
— then you could tab-complete them instead of doingrk --help
. way less to maintain (unless you're adding aliases from a bunch of different sources, in which case you may have bigger problems)I have about 25 or so shell scripts I use somewhat regularly and well over 300 aliases. I actually specifically don't wrap package manager related scripts for no reason in particular, but many often do.
My rule for an alias is if the amount of custom flags gets lengthy, and I use it often, yeah it gets an alias. Here's an example of using yt-dlp:
alias ytdl='yt-dlp --sponsorblock-remove all --write-auto-sub -f "bestvideo\*+bestaudio[ext=m4a]/best" -f mp4'
For shell scripts, my rule goes that it should probably have multiple features related around a single idea, that way you can use getopts to create custom flags. For example, I have a script that wraps very basic, but commonly used,
git
commands, chaining the classicadd
,commit -m
, andpush
behind a series ofread
prompts, it has-h
flags for help-l
for a minimal log output,-i
to initialize a new repository (even using github api token to remotely create the repo if you want to use github), and-r
to revert back changes to a specified commit.Generally speaking aliases will get you what you need most of the time in a pinch, but shell scripting is more powerful, versatile, but potentially more time consuming.
Others have rightly pointed out that these abstractions can sometimes negatively impact muscle memory, but IMHO this only really applies if you work as devops or sysadmin, where you are often responsible for running many different Linux servers, but usually this isn't an issue if you have access to the internet and can see your saved aliases and/or scripts (but yeah, instant recall of native commands trumps notes every time).
Additionally, another mentioned using
git
to keep track of your aliases, which I totally agree with. Whatever you do, back up your aliases and shell scripts, ideally with a git repo of some kind. This not only allows you to take your new scripts/aliases with you wherever you go, but also reference them later in case it's not possible to use them on not your machine.Hope this helps. Bash can be crazy powerful if you take the time to learn it, and aliases are a great entry point to recognizing that potential. Here's one of my favorites that combines
mkdir
withcd
:alias mkcd='{ IFS= read -r d && mkdir "$d" && cd "$d"; } <<<'
Good luck, and have fun.
Others have rightly pointed out that these abstractions can sometimes negatively impact muscle memory, but IMHO this only really applies if you work as devops or sysadmin
I feel both seen and called out lol
Lol. Emphasis on the H in IMHO. I meant no offense, it's a valid point.
No offense taken, I just wasn't expecting to get read like that lmao — I guess having to operate Other People's Servers really causes a certain kind of (recognizable) cynicism
You may like this pattern of starting all custom commands with a comma - benefits against a wrapper command would be shorter command names and built-in tab completion.