# External Commands Homebrew, like Git, supports *external commands*. This lets you create new commands that can be run like: ```shell $ brew mycommand --option1 --option3 formula ``` without modifying Homebrew's internals. ## COMMAND TYPES External commands come in two flavors: Ruby commands and shell scripts. In both cases, the command file should be executable (`chmod +x`) and live somewhere in `$PATH`. ### RUBY COMMANDS An external command `extcmd` implemented as a Ruby command should be named `brew-extcmd.rb`. The command is executed by doing a `require` on the full pathname. As the command is `require`d, it has full access to the Homebrew "environment", i.e. all global variables and modules that any internal command has access to. The command may `Kernel.exit` with a status code if it needs to; if it doesn't explicitly exit then Homebrew will return 0. ### SHELL SCRIPTS A shell script for an command named `extcmd` should be named `brew-extcmd`. This file will be run via `exec` with some Homebrew variables set as environmental variables, and passed any additional command-line arguments.
Variable | Description |
HOMEBREW_CACHE | Where Homebrew caches downloaded tarballs to, by default ~/Library/Caches/Homebrew . |
HOMEBREW_CELLAR | The location of the Homebrew Cellar, where software is staged. This will be $HOMEBREW_PREFIX/Cellar if that directory exists, or $HOMEBREW_REPOSITORY/Cellar otherwise. |
HOMEBREW_LIBRARY_PATH | The directory containing Homebrew’s own application code. |
HOMEBREW_PREFIX | Where Homebrew installs software. This is always the grandparent directory of the `brew` executable, /usr/local by default. |
HOMEBREW_REPOSITORY | If installed from a Git clone, the repo directory (i.e., where Homebrew’s .git directory lives). |