.---------------------.
/ aka - also known as /
/---------------------/
Simple, persistent, shell-based command aliasing
Usage: aka alias show stored aliases
aka alias NAME CMD... store an alias for CMD
aka NAME [...] run CMD, optionally with more arguments
By default, aliases are stored in the `.aka` file of the current working
directory. Optionally, the location of that file can be modified by setting the
AKA_FILE enviornment variable. Tested on Debian, OpenBSD, and OpenWRT, aka uses
portable shell syntax and should work everywhere that has a typical /bin/sh
Examples:
$ aka alias demo more
$ aka demo --version
more from util-linux 2.36
$ aka alias demo git
$ aka demo --version
git version 2.28.0
The command you alias can have parameters
$ aka alias l ls -f
$ aka l
.aka .. aka aka_tiny . README .git
And you can pass additional parameters
$ aka l -tR
.. aka_tiny aka .git .aka README .
You can see all of the currently stored aliases
$ aka alias
l='ls -f'
demo='git'
And edit them using your favorite text editor
$ cat .aka
alias demo='git'
alias l='ls -f'
Everything that is not aliased will get executed as a regular command.
$ aka python3 --version
Python 3.8.6
## Why would anyone want this?
A practical use case might be to have
.
├── c_proj
│ └── .aka | alias doit='make install'
├── go_proj
│ └── .aka | alias doit='go run'
└── python_proj
└── .aka | alias doit='pip install .'
Now you can `aka doit` to your hearts content inside each of those folders, and
have that execute the appropriate build commands for the type of project it is.
$ for x in *; do (cd $x && aka doit); done
make: *** No rule to make target 'install'. Stop.
go run: no go files listed
ERROR: Directory '.' is not installable. Neither 'setup.py' nor 'pyproject.toml' found.
## Installation
Grab aka, make it executable, and place it somewhere in your path.
## How it works
aka is a tiny portable shell script that gets executed via /bin/sh, sources
AKA_FILE and evals the positional parameters, thus applying aliases and
whatever other shell script shenanigans stored in AKA_FILE.
For example, this means that you can put something like
alias my='AKA_FILE=~/.my_aliases aka'
in your shell's startup files, and thereafter use the `my` command as an `aka`
invocation that always sources ~/.my_aliases file in your home directory,
regardless of where you run it.
## Notes
Initial prototype uses aliases, which may not work for programs that depend on
establishing their behavior based on the `argv[0]` name they were called by
(busybox, for example).
## Ideas
[x] AKA_FILE environment variable set to the file containing the desired
shellscript file to source. Otherwise we look for the `.aka` file in the
current directory.
[ ] `aka unalias` command?
## Related Projects
https://direnv.net/
"direnv is an extension for your shell. It augments existing shells with a new
feature that can load and unload environment variables depending on the current
directory." The direnv website has links to a half dozen similar projects.