Bring the best of OSS JavaScript development to your projects with npm Orgs - private packages & team management tools.Learn more »


2.0.0 • Public • Published


Interactive CLI to pass output from one command as input to another

Node 7+ required!

$ npm install --global pipe-boy


Example of previewing output from several different commands

phase 1

Example of chaining two commands together

phase 2

Example of setting up custom functions

custom functions

Example of running command (vim) inheriting terminal stdio


Example of scroll bars appearing with long output

scroll bars

Example of changing config at runtime

runtime config

Help screen

$ pipe-boy --help
 ______ __               ______
|   __ \__|.-----.-----.|   __ \.-----.--.--.
|    __/  ||  _  |  -__||   __ <|  _  |  |  |
|___|  |__||   __|_____||______/|_____|___  |
          |__|                       |_____|

    This command allows you to take output from one command, modify it, then
use it as input into another command.

    Phase 1) If no arguments are passed, this phase is entered and you are
prompted to enter a command. The output of this command will be used as input
for the next. You can preview this output by pressing tab to preview on-screen,
or shift+tab to preview inside less. Once finished, press enter to move on to
phase 2.
    Phase 2) This is phase is entered once phase 1 is complete, or if any
arguments are passed when initially running this command. In this phase you are
prompted to enter another command, where the input from the previous phase is
available as $1. You can navigate each line of the output by using the arrow
keys. If a line is selected, that line will be available as $1.
    By default, the $1 string is not escaped. You can escape it by passing the
:escaped flag (see pipe-boy --controls for more info) or by setting the
alwaysEscapeInput config option (see pipe-boy config --help for more info). If
it is escaped, newlines will be replaced by spaces.

    Unfortunately many commands remove colored output when it's not printed
directly to a terminal. You may have to enable colors for these commands
case-by-case. You can also setup custom functions to alias commands that force
colorized output. See below.

    One drawback of this tool is that any custom aliases or functions on your
terminal are lost when executing commands. One possible solution to this is to
redefine any custom functions inside the config file
{{HOME}}/.pipe-boy/ Every time a command is run with this tool,
these definitions will be prepended to the command string.
    Note: setting alias-es will not work, as they only take effect in
interactive shells (all commands are run inside Node's child_process, which is
not interactive).

    -c, --controls   Print controls screen.
    -h, --help       Print this help screen.
    -v, --version    Print the version of this package.

    Providing config keys and values as CLI options can change the config
object on a per-run basis. This will not overwrite the config file. Nested keys
can be separated by a period (.). See pipe-boy config for a list of available

    pipe-boy --banner.color red # runs as usual changing the banner to red

Controls screen

$ pipe-boy --controls
     ENTER -- confirm/proceed
     TAB -- preview on-screen (if on phase 2, previews inside less)
     SHIFT+tab -- preview inside less
     ↑/↓ (up/down) -- select individual lines out of $1 *
     SHIFT+↑/↓ (up/down) -- scroll output horizontally/vertically. Hold ctrl to
scroll a half-page
     ESC cancel individual line selection *
     CTRL+r refresh/redraw
     CTRL+e erase and reset any input and output (does not change phases)

     :h, :help -- print help screen
     :c, :controls -- print controls screen
     :back -- go back to phase 1 *

     $1 -- input from previous command or currently selected line *
     :e, :E, :escaped -- escapes input string when populating $1 *+
     :i, :I, :interactive -- inherit terminal stdio when running commands +

* -- available in phase 2
+ -- must be appended in a comment at the end of the command

Config screen

$ pipe-boy config --help
     Command line API to manage the configuration file(s).

     $ pipe-boy config <command> <args> ...

     $ pipe-boy config help                  # show this help screen
     $ pipe-boy config get                   # print entire config
     $ pipe-boy config get <key> ...         # print key/value pair(s)
     $ pipe-boy config set <key> <value> ... # set key/value pair(s)
     $ pipe-boy config reset                 # reset entire config file back to
     $ pipe-boy config reset <key> ...       # reset key(s) back to defaults
     $ pipe-boy config check                 # scan config for superfluous keys
     $ pipe-boy config path                  # print path to config file

     FORCE_COLOR -- sets the $FORCE_COLOR environment variable when executing
commands. Defaults to true.
     setCwdOnCd -- attempts to detect when cd is present and sets the working
directory for sub commands (used during phase 2). Defaults to true.
     alwaysEscapeInput -- escapes input string when populating $1. Defaults to
     banner.text -- the text used as the banner. Defaults to PipeBoy.
     banner.font -- the font used as the banner. Defaults to chunky.
     banner.color -- the color used as the banner. Defaults to green.
     banner.horizontalLayout -- the horizontalLayout used as the banner.
Defaults to default.
     banner.verticalLayout -- the verticalLayout used as the banner. Defaults
to default.

     PipeBoy makes use of the amazing figlet npm package to make the banner.
For more information on banner options or to see a full list of available
fonts, see


npm i pipe-boy

Downloadsweekly downloads









last publish


  • avatar
Report a vulnerability