rbenv plugins provide new commands and/or hook into existing functionality of rbenv. The following file naming scheme should be followed in a plugin project:
An rbenv command is an executable named like
rbenv-COMMAND. It will get
executed when a user runs
rbenv COMMAND. Its help will be displayed when a
rbenv help COMMAND. It can be written in any interpreted language,
but bash script is recommended for portability.
A plugin command can't override any of the rbenv's built-in commands.
Each rbenv command runs with the following environment:
$RBENV_ROOT- where rbenv versions & user data is placed, typically
$RBENV_DIR- the current directory of the caller
$PATH- constructed to contain:
libexecdir with core commands
$RBENV_ROOT/plugins/*/binfor plugin commands
Calling other commands
When calling other commands from a command, use the
rbenv-COMMAND form (with
dash) instead of
rbenv COMMAND (with space).
Use rbenv's core low-level commands to inspect the environment instead of doing
it manually. For example, read the result of
rbenv-prefix instead of
constructing it like
A plugin command shouldn't have too much knowledge of rbenv's internals.
An rbenv command should provide help text in the topmost comment of its source
code. The help format is described in
rbenv help help.
Here is a template for an executable called
#!/usr/bin/env bash # # Summary: One line, short description of a command # # Usage: rbenv COMMAND [--optional-flag] <required-argument> # # More thorough help text wrapped at 70 characters that spans # multiple lines until the end of the comment block. set -e [ -n "$RBENV_DEBUG" ] && set -x # Optional: Abort with usage line when called with invalid arguments # (replace COMMAND with the name of this command) if [ -z "$1" ]; then rbenv-help --usage COMMAND >&2 exit 1 fi
A command can optionally provide tab-completions in the shell by outputting
completion values when invoked with the
# Provide rbenv completions if [ "$1" = "--complete" ]; then echo hello exit fi
Note: it's important to keep the above comment intact. This is how rbenv detects if a command is capable of providing completion values.
Hooks are bash scripts named like
HOOK_NAME/*.bash, where "HOOK_NAME" is one
Hooks are looked for in
$RBENV_HOOK_PATH, which is composed of:
Hook scripts are executed at specific points during rbenv operation. They provide a low-level entry point for integration with rbenv's functionality. To get a better understanding of the possibilities with hooks, read the source code of rbenv's hook-enabled commands listed above.