- Do you write
Bashscripts that should accept arguments?
- But they don't since arguments support is a daunting task, because ...
getoptsdoesn't support long options, there is no widely-accepted
Bashmodule to do the task and some solutions don't work on all platforms (Linux, OSX, MSW)...
Argbash a try and stop being terrorized by those pesky arguments! With Argbash, you will get:
What it is
Argbash is not a parsing library, but it is rather a code generator that generates a bash library tailor-made for your script.
It lets you to describe arguments your script should take and then, you can generate the
bash parsing code.
It stays in your script by default, but you can have it generated to a separate file and let
Argbash to include it in your script for you.
In any case, you won't need
Argbash to run the script.
Argbash is very simple to use and the generated code is relatively nice to read.
Moreover, argument definitions stay embedded in the script, so when you need to update the parsing logic, you just re-run the
argbash script on the already generated script.
You can start using Argbash even more quickly by generating the initial template for your script using
argbash-init tool, which is also available in this image.
How to use it
This image is useful if you work with Docker and you would like to use Argbash without having to install it.
The sensible way how to use the
Argbash image is to create a one-line shell script that does the same as
argbash-init, but accomplishes the task by creating the container and destroying it after the job has been done.
|Posix (e.g. Linux, MacOS)||
What happens here?
A container is created from the
-toption is needed for the output to be displayed.
-e PROGRAM=argbashoption is redundant and it basically affirms the container to invoke
argbash. If you specify
argbash-initwill be invoked instead, default program is
-v ...:/workmounts the current directory to the working directory of the container, which is
%*propagates any arguments given to this one-liner script to the
argbashinvocation in the container.
Make sure that you use the
-o|--outputoption - if you intend to use the Argbash output to stdout, the line endings will be of the DOS kind (i.e.
\r\n- thanks to Filip Filmar who found this out).
Note that as the container mounts the host directory, you may have issues with SELinux or similar measures enforcing proactive security.
Imagine that you want to download an example, edit it, and make it a full-fledged script with
You obviously have to fire up
docker, but then, you just create the one-liner, download the example, and proceed.
printf '%s\n' '#!/bin/bash' 'docker run -it --rm -v "$(pwd):/work" matejak/argbash "$@"' > argbash-docker printf '%s\n' '#!/bin/bash' 'docker run -it -e PROGRAM=argbash-init --rm -v "$(pwd):/work" matejak/argbash "$@"' > argbash-init-docker chmod a+x argbash-docker argbash-init-docker ./argbash-init-docker --pos positional-arg --opt optional-arg minimal.m4 vim minimal.m4 ./argbash-docker minimal.m4 -o my-script.sh ./my-script.sh -h