You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
Ben Kogan 6393eb48d8 Add bpkg-init script 10 years ago
lib Add bpkg-init script 10 years ago
LICENSE Initial commit 10 years ago
Makefile Add suggest and show helpful commands in help menu 10 years ago
README.md more info in readme about new installs 10 years ago
bpkg init 10 years ago
bpkg-init Add bpkg-init script 10 years ago
bpkg-install init 10 years ago
bpkg-json init 10 years ago
bpkg-package init 10 years ago
bpkg-suggest Add suggest and show helpful commands in help menu 10 years ago
bpkg-term add term 10 years ago
bpkg.sh bump version 10 years ago
install.sh fix install script 10 years ago
package.json bump version 10 years ago

README.md

bpkg

Lightweight bash package manager

install

Install script:

$ curl -Lo- https://raw.githubusercontent.com/bpkg/bpkg/master/install.sh | bash

clib:

$ clib install bpkg/bpkg

source:

$ git clone https://github.com/bpkg/bpkg.git
$ cd bpkg
$ make install

usage

installing package

global:

$ bpkg install term -g

project: (installs into deps/)

$ bpkg install term

versioned:

$ bpkg install jwerle/suggest.sh@0.0.1 -g

note: Versioned packages must be tagged releases by the author.

installing packages without a package.json:

As long as there is a Makefile in the repository it will try to invoke make install so long as the -g or --global flags are set when invoking bpkg install.

One could install git-standup with an omitted package.json because of the Makefile and the install target found in it.

$ bpkg install stephenmathieson/git-standup -g

    info: Using latest (master)
    warn: Package doesn't exist
    warn: Mssing build script
    warn: Trying `make install'...
    info: install: `make install'
cp -f git-standup /usr/local/bin

package info

From the root of a package directory:

$ bpkg package name
 "bpkg"
$ bpkg package version
 "0.0.5"
$ bpkg package
["name"]        "bpkg"
["version"]     "0.0.5"
["description"] "Lightweight bash package manager"
["global"]      true
["install"]     "make install"

package.json

name

The name attribute is required as it is used to tell bpkg where to put it in the deps/ directory in you project.

  "name": "my-script"

version

The version attribute is not required but can be useful. It should correspond to the version that is associated with the installed package.

  "version": "0.0.1"

description

A human readable description of what the package offers for functionality.

  "description": "This script makes monkeys jump out of your keyboard"

global

Indicates that the package is only intended to be install as a script. This allows the ommition of the -g or --global flag during installation.

  "global": "true"

install

Shell script used to invoke in the install script. This is required if the global attribute is set to true or if the -g or --global flags are provided.

  "install": "make install"

scripts

This is an array of scripts that will be installed into a project.

  "scripts": ["script.sh"]

best practices

package exports

Its nice to have a bash package that can be used in the terminal and also be invoked as a command line function. To achieve this the exporting of your functionality should follow this pattern:

if [[ ${BASH_SOURCE[0]} != $0 ]]; then
  export -f my_script
else
  my_script "${@}"
  exit $?
fi

This allows a user to source your script or invoke as a script.

$ ./my_script.sh some args --blah

or

$ source my_script.sh
$ my_script some more args --blah

license

MIT