|
|
|
|
|
by 0xbadcafebee
765 days ago
|
|
I've never found the need for a task runner since learning shell scripting. A lot of people recommend just; here's their sample file: alias b := build
host := `uname -a`
build:
cc *.c -o main
test-all: build
./test --all
test TEST: build
./test --test {{TEST}}
Here's how I would do that with shell: #!/usr/bin/env sh
set -eu
b="build"
host=`uname -a`
_cmd_build () { # build: Build main program
cc *.c -o main
}
_cmd_test_all () { # test_all: Run all tests
_cmd_build
./test --all
}
_cmd_test () { # test TEST: Run a test TEST
_cmd_build
./test --test "$1"
}
_cmd_help () {
echo "Available targets:"
grep -E "^_cmd_[^[:space:]]+ \(\) {.+" "$0" | sed -E 's/.*#/ /'
}
[ $# -gt 0 ] || _cmd_help
set -x
"_cmd_$1" "$@"
$ chmod 0755 run.sh
$ ./run.sh
Available targets:
build: Build main program
test_all: Run all tests
test TEST: Run a test TEST
./foo.sh: line 23: $1: unbound variable
$ ./run.sh build
$ ./run.sh test_all
$ ./run.sh test foo.t
But this example (from just's homepage) is clearly a build process, so I would use Make for it instead. When I need to be able to run individual sets of commands with arguments and options, I make a shell script. Many more features available, more flexibility, I can tailor it to my use case. |
|
- It handles all that boilerplate for you. The only stuff in the justfile is code you want to execute, not the code to figure out which code to execute.
- Out-of-the-box tab completion. "What did I name that recipe? `just t<tab>` Oh, `test-all`, that's right!"
I like not reinventing those wheels. Let someone else manage that hassle for me.