I already wrote a post about adopting a functional programming style in Bash scripts. Here I want to explore how to build a minimal, reusable functional toolbox for my bash scripts, avoiding redefinition of base functional bricks whenever I need them.
So, in short: I wish I could write a scripts (say use-functional-bricks.sh
) like the following
1 |
|
referring to “globally” available functions map
and reduce
(and maybe others, too) without to re-write them everywhere they are needed and without to be bound to external scripts invocation.
The way I think we can solve the problem refers to three interesting features available in bash:
- export functions from scripts (through
export -f
) - execute scripts in the current shell’s environment, through
source
command - execute scripts when bash starts
So I wrote the following script (say functional-bricks.sh
):
1 |
|
and added the following line at the end of my user’s ~/.bashrc
file:
1 | . ~/common/functional-bricks.sh |
and… voila!: now map
and reduce
implemented in functional-bricks.sh
are available in all my bash sessions - so I can use them in all my scripts!
And because seeing is beleiving… if I launch the script use-functional-bricks.sh
defined above, I get the following output:
1 | square_after_double_output 4 |