Skip to content

PWB Script Repository

Chuck Jungmann edited this page Jan 6, 2025 · 3 revisions

I have established a protocol for extending and supplementing pwb features through Bash code. I haven't seen anything else like this, so this page describes how it works for the purposes of getting opinions.

The pwb builtin is not a complete design tool. It is intended to perform certain actions that are hard to implement in Bash script. I have been creating a small library of Bash script fragments that fill the gap between what pwb does and what is needed for a useful application.

Scriptlets

Scriptlets are Bash code fragments. They contain Bash code, but are not executable and do not contain a shebang.

  • implement features with Bash script that are not included in pwb command api
  • are named after the one public function contained in the file.
  • self-documenting through pwb_sources function.
  • are often interdependent, relying on other scriptlets.
  • installed in /usr/local/lib/pwb_sources
  • uninstalled scriptlets can be found in project directory pwb_sources.d.

Command pwb_sources

This command manages the scriptlets. It can be used on the command line and in Bash scripts.

  • pwb_sources without arguments will show available pwb scriptlets
  • pwb_sources help pwb_read_args will show a usage message with arguments, options, and a description.
  • pwb_sources pwb_read_args pwb_exit_on_error will generate a tiny script that loads the listed scriptlets.
    • use the Bash notation <( ... ) to create a temporary file from which the source command will load.
  • The code generated by pwb_sources only loads scriptlets that have not already been loaded.

Example:

#!/usr/bin/env bash
enable pwb
source <( pwb_sources \
               pwb_exit_on_error \
               pwb_read_args     \
               pwb_show_message )

# code continues

The script fragment shows how scriptlets are sourced into a project. pwb_sources will generate code that will load the named scriptlets if the functions they host have not yet been loaded. This allows scriptlets to be interdependent without sourcing multiple copies of functions. For example, the pwb_exit_on_error function may be used by many other scriptlets. Scriptlets that need pwb_exit_on_error will include, as in the example, a call to pwb_sources to load pwb_exit_on_error with any other necessary functions names. If the function has already been loaded by the project or by other scriptlets, it will not be loaded again.

Clone this wiki locally