Ahoy is command line tool that gives each of your projects their own CLI app with zero code and dependencies.
Write your commands in a YAML file and then Ahoy gives you lots of features like:
Ahoy makes it easy to create aliases and templates for commands that are useful. It was created to help with running interactive commands within Docker containers, but it's just as useful for local commands, commands over ssh
, or really anything that could be run from the command line in a single clean interface.
Say you want to import a MySQL database running in docker-compose
using another container called cli
. The command could look like this:
docker exec -i $(docker-compose ps -q cli) bash -c 'mysql -u$DB_ENV_MYSQL_USER -p$DB_ENV_MYSQL_PASSWORD -h$DB_PORT_3306_TCP_ADDR $DB_ENV_MYSQL_DATABASE' < some-database.sql
With Ahoy, you can turn this into:
ahoy mysql-import < some-database.sql
.ahoy.yml
file, but can be called from any subfolder.{{args}}
.ahoy.yml
show up as ahoy command help and shell completion of commands (see bash/zsh completion) is also available.Using Homebrew:
brew install ahoy
Note that ahoy
is in homebrew-core
as of 1/18/19, so you don't need to use the old tap.
If you were previously using it, you can use the following command to remove it:
brew untap ahoy-cli/tap
Download the latest release from GitHub, move the appropriate binary for your plaform into someplace in your $PATH and rename it ahoy
.
Example:
os=$(uname -s | tr [:upper:] [:lower:]) && architecture=$(case $(uname -m) in x86_64 | amd64) echo "amd64" ;; aarch64 | arm64 | armv8) echo "arm64" ;; *) echo "amd64" ;; esac) && sudo wget -q https://github.com/ahoy-cli/ahoy/releases/latest/download/ahoy-bin-$os-$architecture -O /usr/local/bin/ahoy && sudo chown $USER /usr/local/bin/ahoy && chmod +x /usr/local/bin/ahoy
For WSL2, use the Linux binary above for your architecture.
{{args}}
. Use regular bash
syntax like "$@"
for all arguments, or $1
for the first argument.bash
. E.g. using PHP, Node.js, Python, etc. is possible.# All files must have v2 set or you'll get an error
ahoyapi: v2
# You can now override the entrypoint. This is the default if you don't override it.
# {{cmd}} is replaced with your command and {{name}} is the name of the command that was run (available as $0)
entrypoint:
- bash
- "-c"
- '{{cmd}}'
- '{{name}}'
commands:
simple-command:
usage: An example of a single-line command.
cmd: echo "Do stuff with bash"
complex-command:
usage: Show more advanced features.
cmd: | # We support multi-line commands with pipes.
echo "multi-line bash script";
# You can call other ahoy commands.
ahoy simple-command
# you can take params
echo "your params were: $@"
# you can use numbered params, same as bash.
echo "param1: $1"
echo "param2: $2"
# Everything bash supports is available, if statements, etc.
# Hate bash? Use something else like python in a subscript or change the entrypoint.
subcommands:
usage: List the commands from the imported config files.
# These commands will be aggregated together with later files overriding earlier ones if they exist.
imports:
- ./some-file1.ahoy.yml
- ./some-file2.ahoy.yml
- ./some-file3.ahoy.yml
./docs
directory.ahoy deps
to install the python dependencies.ahoy build-docs
(This will convert all the .md files to docs)