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
              1

       Manual group
              shell library

   SYNOPSIS
          script.using.shellia [-i|-s|-m] [-d debug-runtime-config] [-a] [--] [script-specific-options]

   DESCRIPTION
       shellia is a library that allows to run shell scripts interactive and helps to familiarize  oneself  with
       large  shell  scripts,  find  the  cause  of unexpected behaviour in shell scripts, and run shell scripts
       silently, while checking them step by step.

       A script.using.shellia can be called with option -i to run in interactive-mode.  This means that the user
       can start steps of the script.

       If  the script.using.shellia uses check-mode, output and return values of internal steps are checked.  If
       something unexpected happens, the script can either stop or ask the user what to do.

   OPTIONS
   General options
       -i     use interactive-mode

       -s     be silent

       -m     minimal control

       -d debug-runtime-config
              Turn debug-mode on from the beginning. You also may  turn  debug  on  and  off  while  running  in
              interactive-mode.

       -a     Use only ascii without colour in interactive-mode and logging-mode

   EXAMPLE
       Be  aware  that  the  step  sizes in the examples listed below are only reasonable to demonstrate shellia
       features and for no other purpose.  Please read shellia(7) NOTES, to learn about a reasonable step size.

   Basic features
       On   debian   systems   the   following    described    script    hello_world    may    be    found    at
       /usr/share/doc/shellia/examples/hello_world.

       If called without option, it will just print the words hello and world:

          $ /usr/share/doc/shellia/examples/hello_world
          hello
          world

       If called with option -i, you will have some interactive choices:

          $ /usr/share/doc/shellia/examples/hello_world -i
          === hello_world ===
          1 echo "hello"
          2 echo "world"
          c continue without questionsq quit
          ? [1]

       Entering  1 would execute the first step and print the word hello.  Actually, because 1 is preselected as
       shown in the last line, just entering RETURN, would do the same.  Step 2 is equivalent to step 1.   After
       step  2 the preselection would change to q.  q means quit and can be pressed anytime to leave the current
       step level, Which would leave the shell script in our case.  Instead of entering 1, 2 and q, c could have
       been entered to continue automatically.

       A discussion of the source of this shell script can be found in shellia(3) Basic features.

   Interactive-mode
       In  Basic  features all steps shown in Interactive-mode have been at the same level.  In Interactive-mode
       muliple levels are supported.

       On   debian   systems   the   following   described   script   hello_world_fun   may    be    found    at
       /usr/share/doc/shellia/examples/hello_world_fun.

       If called without shellia specific option, but with the name "Test User", the output will be:

          $ /usr/share/doc/shellia/examples/hello_world_fun "Test User"
          hello Test User

       If additionally called with option -i, you will have some interactive choices:

          $ /usr/share/doc/shellia/examples/hello_world_fun -i -- "Test User"
          === hello_world_fun ===
          1 say_hello -i -- "Test User"
          i toggle -i flag
          q quit?
          [1]

       Entering i turns -i on and off as shown above and in the next line:

          1 say_hello -- "Test User"

       If  we would press 1 while -i is off, the function say_hello would be executed at once.  Pressing 1 while
       -i is on would start function say_hello in interactive-mode and display the following menu with steps  in
       a deeper level:

          === hello_world_fun/say_hello ===
          1 name="Test User"
          2 echo "hello $name"
          c continue without questions
          q quit?
          [1]

       In  the  heading  we  can see, the name of the current function.  Because we have to start with the first
       step in this function again 1 is preselected.  To run all steps in this function we can  press  c.  After
       executing, we will return to the previous menu and can press RETURN to select the preselected quit.

       A discussion of the source of this shell script can be found in shellia(3) Interactive-mode.

   Debug-mode
       Each   debug-statement   in   a   script-using-shellia   has   additionally   to   the   debug-output   a
       debug-statement-level, and a debug-statement-topic with the defaults 1 and none.

       At runtime the script gets a debug-runtime-level and a debug-runtime-topic list with the defaults  0  and
       empty.

       The   debug-output   will   be  shown  if  the,  the  debug-runtime-level  is  higher  or  equal  to  the
       debug-statement-level and either the debug-statement-topic is in the  debug-runtime-topic  list,  or  the
       debug-runtime-topic list is empty.

       On     debian     systems     the     example     script    hello_world_debug    may    be    found    at
       /usr/share/doc/shellia/examples/hello_world_debug.

       In the header of the script we can read, that the used debug-topics are none, start and end and that  the
       higest debug-level is 3.

       To  see  all  debug-output  we  can  start  with  an  empty  debug-runtime-topic  list  and the very high
       debug-runtime-level 99:

          $ /usr/share/doc/shellia/examples/hello_world_debug -d 99
          DEBUG main program
          DEBUG say_hello function start
          hello world
          DEBUG say_hello function end

       To see only the debug-topics none and start in interactive-mode we can call:

          $ /usr/share/doc/shellia/examples/hello_world_debug -d "99 none start"
          === hello_world_debug ===
          1 dbg "main program"
          2 say_hello_world
          d ... change dbg: 99 none start
          c continue without questions
          q quit
          ? [1]

       If we now change our mind, to not see the debug-topic start anymore and to change the  debug-level  2  we
       can change this by entering d start 2 before continuing with c:

          ? [1] d start 2
          === hello_world_debug ===
          1 dbg "main program"
          2 say_hello_world
          d ... change dbg: 2 none
          c continue without questions
          q quit
          ? [1] c
          DEBUG main program
          hello world

       The interactive-mode can be used to turn on debug-output only in steps where we need it.

   Log-mode
       If  the  script-using-shellia  creates  a  logfile  as  described in shellia(3) logfile-mode, the created
       logfile has some features as shown in the example script hello_world_log.  On debian systems  it  may  be
       found  at /usr/share/doc/shellia/examples/hello_world_log.  The example script will automatically display
       the logfile at the end.

       First we call it without options:

          $ /usr/share/doc/shellia/examples/hello_world_log "shellia user"
          hello shellia user
          --- LOGFILE ---
          |hello_world_log
          ||hello_world_log/say_hello
          ||s:hello shellia user
          ---------------

       The first line shows how the script is called.  The second line shows the  output  of  the  script  hello
       shellia  user  Then  the  logfile  is displayed in two lines starting with dashes.  The first line of the
       logfile has one bar, indicating that we are in the  first  level,  which  is  the  main  script  in  file
       hello_world_log  The  second  line  of  the  logfile  has  two bars, indicating we are in the next level,
       followed by the filename and the function name.  The third line is from the same function and  show  with
       an s:, that stdout hello shellia user has been created by this function.

       We  will  now  run  the  same script with all debug output enabled to see debug information with the word
       DEBUG added

          $ /usr/share/doc/shellia/examples/hello_world_log -d 99 "shellia user"
          DEBUG main program begin
          DEBUG funtion say_hello called with 1 arguments
          hello shellia user
          DEBUG function say_hello end
          DEBUG main program end
          --- LOGFILE ---
          |hello_world_log
          |DEBUG main program begin
          ||hello_world_log/say_hello
          ||DEBUG funtion say_hello called with 1 arguments
          ||s:hello shellia user
          ||DEBUG function say_hello end
          |DEBUG main program end
          ---------------

       Another way is to start in interactive mode, manually select the function with 2, continue all  steps  in
       the  function  with c and then quit with q.  Now also the interactive input and output will be logged and
       the logfile will be too large, to display it here.

   variable in Interactive-mode
       If you see $<var> in interactive mode, the meaning is like ${var}, but you can press v to see the  actual
       value of the variable.  If you press v again, the name of the variable is shown as before.

   NOTES
       shellia  is  tested  successful with bash, dash, busybox sh, mksh and posh.  To use shellia with posh the
       nounset option (set -o nounset or set -u) is not supported because of Bug #913718 (posh can not use  "$@"
       together  with  set -u). Because of Bug #910275 (posh does never execute an "EXIT trap", if it is created
       with the "trap" command in a sub shell) remaining files named "/tmp/shellia.??????????" should be deleted
       manual,  after  using  shellia  with  posh.   shellia  can not be used in ksh, because the shell does not
       support the local command.

   error messages
       ERROR: ia premature exit of command unchecked output: unchecked output
          Before output of a command issued with check-mode can be printed, it will be collected and checked. If
          the  script.using.shellia exits premature, the already collected unchecked output is printed with this
          error message.

   SEE ALSO
       shellia(3), shellia(7)

                                                                                                       SHELLIA()