focal (7) shellia.7.gz

Provided by: shellia_5.6.1_all bug

NAME

       shellia -

       #    copyright: Bernd Schumacher <bernd.schumacher@hpe.com> (2007-2020) #     license: GNU General Public
       License, version 3

LIBRARY FOR INTERACTIVE SHELL SCRIPTS

       Author bernd.schumacher@hpe.com

       Date   2018-07-26

       Copyright
              gpl3

       Version
              0.1

       Manual section
              7

       Manual group
              shell library

   SYNOPSIS
          . /usr/share/shellia/ia[.interactive|.check|.debug|]

   NAME
       shellia is a library that allows to run shell scripts interactive.  The  word  interactive  is  the  most
       characteristic  adjective  for shellia and the shortest abbreviation found for interactive is ia.  Such a
       short abbreviation is needed, because most commands brought by shellia start with this short  prefix  ia.
       shellia is composed from shell and ia.

       See also PREFIX in shellia(3).

   DESCRIPTION
       shellia  is  a library that allows to run shell scripts silently or interactive and helps to check errors
       of commands that are combined in steps.

       This makes it easy to familiarize oneself with a shell script  that  uses  shellia  and  find  unexpected
       behaviour  in the shell script.  Also when running the shell script silently shellia can check it step by
       step.

       Shell scripts often become large with many subfunctions,  calling  many  commands.   This  leads  to  the
       following problems, where shellia can help:

       • It  is not easy to run only parts of the script, to learn about an existing script, to find an error in
         a script, to change the order of parts of the script for testing or to rerun only a part of the  script
         that failed.

       • It  is  not easy to find out, from which part of the script errors, warnings or messages that appear on
         stdout or stderr are created.  And it is often not clear if output of a shell script is ok and  can  be
         ignored.

       • Often  commands  are  started in a shell script without checking for Errors because this would make the
         scripts too complex.

       • Many programs can only enable debug at start time.  This can result in much debug output, also if  only
         specific debug output is needed.

       The shellia library can help with the following features.

       • run a script or parts of a script interactively

       • check each command for unexpected output or returncode

       • jump to interactive mode if an error occurs or exit the script

       • helps to structure large scripts

       • in interactive mode shellia can toggled the debug output level

   NOTES
       When building a ./script.using.shellia the following hints may be helpful:

   Do not use a single command as a step
       It  is  important  to  find the right size of a step to be uses in shellia.  The idea of a step is not to
       check the execution of a single command.  Instead a single command can be part of  a  function,  that  is
       called by a step.

   Input and Output of a step
       Each  step  should be interactively runable by an end user of the script.  This means the end user should
       be able to handle input and output of a step.  This often means a step should  not  read  stdin  or  send
       stdout to another step.  For example a backup script could have one step to backup /home and another step
       to backup /usr.  But a step that reads data from work disk and another step that writes backup data to  a
       backup disk should better be combined in a single step.

   Reasonable size of interactive steps
       If the user of the script can not imagine what an interactive step does, this step may be to detailed and
       to small.  If to many errors may happen in the interactive step, the step may be to large.  For  example,
       if  you need to mount an external disk, this should be a separate interactive step. Because this can give
       errors, if the disk is not readable. And this errors can again lead to follow up errors.

   When to use check option -c and -C
       Both options will check the output and the exit code of a step.   All  output  has  to  be  allowed  with
       extended  regular  expressions  in  check-mode.  To be able to control the exit code in the same way, the
       line exit=<exit code> (with <exit code> replace by the exit code), will be added, if  the  exit  code  is
       nonzero.

       With  option  -c, per default every output to stdout and stderr is seen as one output and is displayed as
       an error.  The developer can change this with ia_stdout and ia_ignore.  This means with -c  every  output
       is checked, also output that would normally go to stdout.  This makes it easy to find changed output from
       a command used, e.g.  when upgrading to a new operating system version.

       With option -C, per default every output to stdout is unchanged and all output to stderr is  seen  as  an
       error.   The devloper can ignore error output with ia_ignore.  This means the developer has not to handle
       stdout, which can be good and bad.

       If a step calls a programm, that produces stdout and stderr output, and it is most  important  to  retain
       the  order  of  the  output, option -c should be used. With option -c the output of both streams would be
       combined by shellia to one stream.  If it is important to know if output is from stdout or from stderr to
       decide if it is an error, option -C should be used.

   Use --quiet, --silent or similar if available
       If  commands  are  used with check option -c or -C, less ia_stdout or ia_stderr lines have to written, if
       the commands create less output.

   EXAMPLE
       For example imagine a backup script, that writes to  an  external  disk,  that  should  then  contain  an
       encrypted and bootable backup.

       This script may call the following steps, that are itself functions in the script.

       The main part of the script could look like this:

          eval "$ia_init"
          ia_add "opencrypt <-i>"
          ia_add "mountbkup <-i>"
          ia_add "synccopy"
          ia_add "lvcopyvms <-i>
          ia_add "fixcrypttab"
          ia_add "fixfstab"
          ia_add "prepare_chroot"
          ia_add "fixinitrd"
          ia_add "run_grub"
          ia_add "clean_chroot"
          ia_add "umountbkup <-i>"
          ia_add "closecrypt <-i>"
          ia -C

   SEE ALSO
       shellia(1), shellia(3)

                                                                                                       SHELLIA()