shgen ist ein Linux Programm das innerhalb einer Konsole ein Shellscript generiert. Es nutzt die Bibliothek CDK, die auf ncurses aufbaut.
CDK und ncurses
Ich habe dieses Programm erstellt um mir zum einen ncurses etwas genauer anzusehen, nachdem ist die dialog schon ausreichend kenn und für diesem Zweck kein Wizzard-ähnlichen Ablauf haben wollte. Außerdem wollte ich für Shellscripte, die ich selbst erstelle, einen Generator haben. CDK scheint jedoch etwas veraltet zu seinund nicht aktiv weiter entwickelt zu werden. Es bietet eine gut beschriebene manpage und enthält im -dev paket aus Beispiele.
Wer allerdings auf Mechnismen wie Layouts, Callbacks, Update von nur bestimmten Bildschirmabschnitten hofft, ist bei CDK falsch. Dafür ist CDK eine gute Alternative zu dialog und lange nicht so anspruchsvoll wie eine vollständige Widget-Bibliothek oder gar ein Grafik-Framework wie z.B. Qt. Hier einige Elemente der Bibliothek:
screen: eine Seite mit erstellten Widgets. Mehrere Seiten ermöglichen einen Overlay-ähnlichen Mechanismus zum Blättern oder Zeichnen.
draw: stellt Funktionen für das Zeichnen von Boxen, Linien und Zeichen zur Verfügung.
display: Steuerzeichensatz zum Einfärben, Unterstreichen, fett Drucken, Ausrichten usw. von Zeichen.
binding: Funktionen zum Binden von Tastendrücken zum Widget.
misc: unterstützende Funktionen um z.B. Texte aus Dateien auszulesen und bereit zu stellen.
Die unterschiedlichen Widgets lassen sich auf dem screen mittels einen Größen- und Positionsangabe zeichnen. Zu den Widgets gehören: Label, Button, Radio List, Entry Field oder Popup. Außerdem lässt sich auch eine Menu Bar realisieren.
Das Projekt befindet sich auf dem binomiant Git Server unter:
https://www.binomiant.duckdns.org/9wAuyR5S/?p=shgen.git
Installation
Der nachfolgende Link stellt Ubuntu Pakete bereit, die direkt zur Installation mittels dpkg -i shgen_0.1-1_<arch>.deb verwendet werden können. Die Mindestversion ist Ubuntu Lucid 10.04.
Download von Ubuntu Paketen (src, amd64, i386): shgen v0.1
Nutzung
Zum Ausführen ist eine Standardkonsole mit den Abmessungen 80×24 Zeichen notwedig. In dieser nach der Installation einfach shgen ausführen.

Die obere Zeile gibt die generell möglichen Kommandos an, Help und Quit. Help beschreibt die einzelnen Einstellungen. Mit drücken von F10 wird das Progamm verlassen.
Die untere Zeile gibt die kontextabhängigen Befehle an, abhängig davon, auf welchem Widget man ist.
Werden alle Optionen genutzt und entsprechend eingestellt, ergibt sich folgendes Shellscript:
#!/bin/bash
#
# A sample shell script.
# Copyright (C) 2018 dragan
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
LANG=C
STDERR=$(mktemp)
. /home/dragan/Projekte/lib.sh
usage()
{
cat << EOF
A sample shell script.
Usage: $0 [-h]
Options: -h show help (resp. this message)
EOF
}
while getopts ":h" opt; do
case $opt in
h)
usage
;;
*)
usage
;;
esac
done
#
# Your code goes here.
# Using the generated error function a sample instruction looks as follows:
#
# mkdir what_a_nice_dir 1>/dev/null 2>$STDERR ||\
# error "mkdir failed" "$(cat $STDERR)"
#
exit 0
Die erzeugte lib.sh ist hier zu sehen:
#!/bin/bash
#
# Library functions and definitions.
# Copyright (C) 2018 dragan
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
LANG=C
exec 3>/home/dragan/Projekte/script.log
BASH_XTRACEFD=3
set -x
log()
{
echo -n "$(basename $0): LOG: $1"
[ -z $2 ] || { echo; echo "$2"; } && { echo; }
}
error()
{
echo -n "$(basename $0): ERROR: $1"
[ -z $2 ] || { echo; echo "$2"; } && { echo; }
exit 1
}
log()
{
echo -n "$(basename $0): WARNING: $1"
[ -z $2 ] || { echo; echo "$2"; } && { echo; }
}
