OILS / stdlib / osh / task-five.sh View on Github | oilshell.org

62 lines, 28 significant
1#!/usr/bin/env bash
2#
3# Common shell functions for task scripts.
4#
5# Usage:
6# source $LIB_OSH/task-five.sh
7#
8# test-foo() { # define task functions
9# echo foo
10# }
11# task-five "$@"
12
13# Definition of a "task"
14#
15# - File invokes task-five "$@"
16# - or maybe you can look at its source
17# - It's a shell function
18# - Has ### docstring
19# - Doesn't start with _
20
21: ${LIB_OSH=stdlib/osh}
22source $LIB_OSH/byo-server.sh
23
24_show-help() {
25 # TODO:
26 # - Use awk to find comments at the top of the file?
27 # - Use OSH to extract docstrings
28 # - BYO_COMMAND=list-tasks will reuse that logic? It only applies to the
29 # current file, not anything in a different file?
30
31 echo "Usage: $0 TASK_NAME ARGS..."
32 echo
33 echo "To complete tasks, run:"
34 echo " source devtools/completion.bash"
35 echo
36 echo "Tasks:"
37
38 if command -v column >/dev/null; then
39 _print-funcs | column
40 else
41 _print-funcs
42 fi
43}
44
45task-five() {
46 # Respond to BYO_COMMAND=list-tasks, etc. All task files need this.
47 byo-maybe-run
48
49 case ${1:-} in
50 ''|--help|-h)
51 _show-help
52 exit 0
53 ;;
54 esac
55
56 if ! declare -f "$1" >/dev/null; then
57 echo "$0: '$1' isn't an action in this task file. Try '$0 --help'"
58 exit 1
59 fi
60
61 "$@"
62}