#
Writing Your Scripts
The bashly generate
command is performing the following actions:
- Generates placeholder files in the
src
directory - one file for each of the defined commands in yourbashly.yml
file. These files are generated only once and are never overwritten. - Merges all these partial scripts into a single bash script, and saves it in the root directory of your project.
#
Processing user input
In order to access the parsed arguments in any of your partial scripts, you may
simply access the $args
associative array.
For example:
# Generate a minimal configuration:
$ bashly init --minimal
# Generate the bash script:
$ bashly generate
# Run the script:
$ ./download hello --force
# this file is located in 'src/root_command.sh'
# you can edit it freely and regenerate (it will not be overwritten)
args:
- ${args[--force]} = 1
- ${args[source]} = hello
You will notice that all the arguments of the associative array are printed on
screen. This is done by the inspect_args
function that was inserted into the
generated partial script src/root_command.sh
.
You can now access these variables by modifying src/root_command.sh
like
this:
source_url=${args[source]}
force=${args[--force]}
if [[ $force ]]; then
echo "downloading $source_url with --force"
else
echo "downloading $source_url"
fi
After editing the file, run these commands:
# Regenerate the script:
$ bashly generate # or bashly g for short
# Test its new functionality:
$ ./download a --force
downloading a with --force
#
Adding common functions
In case you wish to add functions that can be used from multiple locations in
your code, you can place *.sh
files inside the src/lib
- these files will
be merged as is to the final bash script.
To get a starting point, you can run the convenience command:
$ bashly add lib
#
Hooks
#
Initialization
Any code within the src/initialize.sh
file will be called before anything else
in your generated bash script.
Tip
If your script defines Environment Variables
with default
values, these
values will be available to you in the initialize.sh
file.
#
Before/after hooks
Any code within the src/before.sh
file will be called before executing any
command, but after processing and validating the command line. Similarly, any
code within the src/after.sh
file will be called after executing any command.
#
Custom header
In case you wish to replace the header in the generated script, simply put the new
content in src/header.sh
.
Note
Be sure to start your header with a shebang:
#!/usr/bin/env bash
Any comment in your source files that begins with two #
symbols, will be
removed from the final generated script. This is ideal for adding developer
notes that should not be visible to your end users.
## this comment will be hidden
# this one will be visible