unixscripts:3-decentbash
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
decentbash [2015/12/31 02:56] – admin | unixscripts:3-decentbash [2020/10/17 03:04] (current) – admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | =====Unixscripts: | ||
+ | |||
Here's my five penn' | Here's my five penn' | ||
- | * use **getopt**(1) to process arguments. There are many good reasons for this. Just do it. Let me count (some of) the ways: | + | ====Use getopt(1)==== |
+ | Use **getopt**(1) to process | ||
* provides a rational, predictable user interface - compare the nasty old peculiarities of tar and find!! | * provides a rational, predictable user interface - compare the nasty old peculiarities of tar and find!! | ||
* supports short option merging eg '' | * supports short option merging eg '' | ||
Line 9: | Line 12: | ||
* plain old simple works - why write bug-prone new code when **getopt**(1) just works? | * plain old simple works - why write bug-prone new code when **getopt**(1) just works? | ||
- | * Even better, use my **getopt**(1) wrapper [[argp.sh]]. | + | ====Use argp.sh(1)==== |
- | | + | Even better, use my **getopt**(1) wrapper [[unixscripts: |
* create the **getopt**(1) command line, | * create the **getopt**(1) command line, | ||
* process the options setting appropriate environment parameters | * process the options setting appropriate environment parameters | ||
* print help & man pages without any extra code | * print help & man pages without any extra code | ||
* honours GNU's [[http:// | * honours GNU's [[http:// | ||
- | * is pretty similar to GNU's **argp**(3) **getopt**(3) wrapper in glibc | + | * is pretty similar to GNU's **argp**(3) |
* further reduces the chance of bugs arising - particularly as the script is maintained | * further reduces the chance of bugs arising - particularly as the script is maintained | ||
* increase the chance that help and man pages are actually written | * increase the chance that help and man pages are actually written | ||
- | * Always provide long options as well as single letter options - they' | + | ====Support Long options==== |
+ | Always provide long options as well as single letter options - they' | ||
- | * respond to the **-h, --help** option with a usage message to **!!!STDOUT!!!** and exit 0 | + | ====Provide help==== |
+ | respond to the **-h, --help** option with a usage message to **!!!STDOUT!!!** and exit 0. This help should be available no matter what the machine' | ||
- | * provide a way to get the program' | + | If there are specific dependencies, |
- | * **-h** and **-V** processing should happen before any other substantial processing or checking is done - make sure **-h** can always be done no matter what | + | ====Provide version info==== |
+ | provide a way to get the program' | ||
- | | + | Note that **-h** and **-V** processing should happen before any other substantial processing or checking is done - make sure **-h** can always be done no matter what |
- | | + | ====Be disciplined with error messages==== |
+ | Error messages should go to **!!!STDERR!!!** - do **not** print the usage as it just fills the screen and hides the meat of the error. At the most, refer the user to the usage page with '' | ||
- | * execute as silently as possible so the user doesn' | + | ====Be disciplined with error exit codes==== |
+ | non-zero exit on any error | ||
- | * The exception, of course, | + | ====Silence |
+ | execute as silently as possible so the user doesn' | ||
- | * include a man page if non-trivial | + | The exception, of course, is if a verbosity command is given, generally with **-v, --verbose** - and the output goes to stdout, thank you very much (so we can distinguish bash's own -x output which goes to stderr) |
- | * always include the // | + | ====man(1) page==== |
+ | include a man page if non-trivial | ||
+ | |||
+ | ====Use a crunchbang==== | ||
+ | always include the // | ||
#! / | #! / | ||
- | * use subroutines heavily - only put the following in the mainline: | + | ====Structure the code==== |
+ | use subroutines heavily - only put the following in the mainline: | ||
initialise | initialise | ||
process_options " | process_options " | ||
main " | main " |
unixscripts/3-decentbash.1451555791.txt.gz · Last modified: 2015/12/31 02:56 by admin