#shell #bundler #bash

app bash_bundler

Collects/bundles bash files into one file

2 releases

0.1.1 May 24, 2021
0.1.0 May 24, 2021

#851 in Development tools


320 lines


Crates.io Documentation Crates.io

Collects/bundles bash files into one file.

By default uses the saver # import ./filename.sh syntax to include other bash files. But can be set to use the already existing source ./filename.sh syntax.

Getting started

cargo install bash_bundler

Once installed:

bash_bundler your-main-file.sh > bundled.sh

Or with a config file:

bash_bundler --config your-config.toml > bundled.sh

examples and style differences

There is a difference between the import and source import statements. The import is relative to the current file, but the source is relative from the base/root file.

for instance: your root file is in src/my_project.sh that looks like:

# import ./utils/utils.sh

my_func "hallo"

and utils.sh looks like:

# import ./other.sh # other contains the my_func

this will import from file ./src/utils/other.sh

With the source it is relative from the root file so like:

source ./utils/utils.sh

my_func "hallo"

and utils.sh looks like:

source ./utils/other.sh # other contains the my_func

This is done so that files containing the source can just be used in normal bash.

cd src

Check the tests folder for more direct examples.


Configs can be used to override/save arguments. Config should look like:

replace_source = true
replace_comment = false
root_path = "./tests/source.sh"

CLI helptext

    bash_bundler [FLAGS] [OPTIONS] <root-path>

    -h, --help
            Prints help information

            disable the '# import ./file.sh` syntax

            enable the 'source ./file.sh` syntax

    -V, --version
            Prints version information

    -c, --config <config>
            path to your toml config

            starting or `main` bash file


~52K SLoC