Skip to content

millerjp/basher

 
 

Repository files navigation

basher

A package manager for shell scripts and functions.

Basher allows you to quickly install shell packages directly from github. Instead of looking for specific install instructions for each package and messing with your path, basher will create a central location for all packages and manage their binaries for you.

Even though it is called basher, it also works with zsh and fish.

Build Status

Installation

  1. Checkout basher on ~/.basher

    $ git clone https://github.com/basherpm/basher.git ~/.basher
  2. Add ~/.basher/bin to $PATH for easy access to the basher command-line utility.

    $ echo 'export PATH="$HOME/.basher/bin:$PATH"' >> ~/.bash_profile

    Ubuntu Desktop note: Modify your ~/.bashrc instead of ~/.bash_profile.

    Zsh note: Modify your ~/.zshrc file instead of ~/.bash_profile.

    For Fish: Add the following to you ~/.config/fish/config.fish

    if test -d ~/.basher
      set basher ~/.basher/bin
    end
    set -gx PATH $basher $PATH
  3. Add basher init to your shell to enable basher runtime functions

    $ echo 'eval "$(basher init -)"' >> ~/.bash_profile

    Same as in previous step, use ~/.bashrc on Ubuntu, ~/.zshrc for Zsh.

    For Fish, use the following line on your ~/.config/fish/config.fish.

    status --is-interactive; and . (basher init -|psub)

Updating

Run basher update to update basher.

Usage

Installing packages

$ basher install sstephenson/bats

This will install bats from https://github.com/sstephenson/bats and add bin/bats to the PATH.

Command summary

  • basher commands - List commands
  • basher help <command> - Displays help for a command
  • basher uninstall <package> - Uninstall a package
  • basher update - Update basher to latest version from master
  • basher list - List installed packages
  • basher outdated - List packages which are not in the latest version
  • basher upgrade <package> - Upgrades a package to the latest version

Packages

Packages are simply github repos (username/repo).

Any files inside a bin directory are added to the path. If there is no bin directory, any executable files in the package root are added to the path.

Any files inside a man directory are added to the manpath.

Optionally, a repo might contain a package.sh file which specifies binaries, dependencies and completions in the following format:

BINS=folder/file1:folder/file2.sh
DEPS=user1/repo1:user2/repo2
BASH_COMPLETIONS=completions/package
ZSH_COMPLETIONS=completions/_package

BINS specified in this fashion have higher precedence then the inference rules above.

Working packages

And many others. If a repo doesn't work, create an issue or a pull request.

Development

To run the tests, install bats:

$ basher install sstephenson/bats

update submodules:

$ git submodule update --init

and then run:

$ make

About

A package manager for shell scripts.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 99.9%
  • Makefile 0.1%