A (toy) language that compiles to bash. You can think of bashup as just a little syntactic sugar sprinkled on top of bash; any valid bash script is also a valid bashup script.
Just a spoonful of sugar makes the bashisms go down...
#!/bin/bash
@fn hi greeting='Hello', target {
echo "${greeting}, ${target}!"
}
hi --target='World'
Installation:
$ pip install bashup
Compile and run the above example:
$ bashup -i above_example.bashup -o above_example.sh
$ bash above_example.sh
Hello, World!
Or just run it directly:
$ bashup -r above_example.bashup
Hello, World!
Compiled code (above_example.sh
):
#!/bin/bash
#
# usage: hi [--greeting=<GREETING>] --target=<TARGET> [ARGS]
#
hi() {
local greeting='Hello'
local target
local target__set=0
local args=()
while (( $# )); do
if [[ "${1}" == --greeting=* ]]; then
greeting=${1#--greeting=}
elif [[ "${1}" == --target=* ]]; then
target=${1#--target=}
target__set=1
else
args+=("${1}")
fi
shift
done
if ! (( target__set )); then
echo "[ERROR] The --target parameter must be given."
return 1
fi
__hi "${greeting}" "${target}" "${args[@]}"
}
__hi() {
local greeting=${1}
local target=${2}
shift 2
echo "${greeting}, ${target}!"
}
hi --target='World'
The generated bash code works with bash 3.1 and above (tested against 3.1 to 4.3).
Bashup tries its best to match the indentation of its compiled code against your hand-written bash. For example:
@fn hi greeting='Hello', target {
echo "${greeting}, ${target}!"
}
...compiles to:
#
# usage: hi [--greeting=<GREETING>] --target=<TARGET> [ARGS]
#
hi() {
local greeting='Hello'
local target
local target__set=0
local args=()
while (( $# )); do
if [[ "${1}" == --greeting=* ]; then
greeting=${1#--greeting=}
...
See this document for planned features.
2.0.2
- Fixed PyPI release.
2.0.1
- Fixed - Issue #9: "Misc updates"
2.0.0
1.1.2
- Badges now use shields.io.
- Fixed - Issue #5: "Make compatible with latest "themattrix/tox" Docker baseimage."
1.1.1
- Tweaked the README.
1.1.0
- Fixed - Issue #2: "Run generated bash code against multiple versions of bash."
- Feature - Issue #3: "Allow running of bashup scripts directly."
- Fixed - Issue #4: "Last positional parameter to @fn may not be passed to generated function."
1.0.0
- Initial release, supports
@fn
syntax.