Creating an Application-Based Terminal Session
One of my first exposures to computers in a work environment was using a Wyse terminal to access a console-based application for data entry. It wasn't until a while later that I learned about terminals in UNIX and how they work. Once I understood it, I wanted to create my own self-contained application that was tied to a telnet or SSH session.
The method I've found to accomplish this involves the
use of the
trap command and some (seemingly) intimate loops. The example code will
be inserted into the .bashrc file of the user to whom you wish to give application access.
The example code was used for spam message entry into the sa-learn application for
[[ -f /tmp/spam.message-$instanceid ]] && rm /tmp/spam.message-$instanceid
trap clean_session SIGINT
while true; do
printf "******** Spam Message Entry Menu ********\n"
printf "Enter the body of spam message, then press Ctrl-D\n"
printf "To exit at any time, press Ctrl-C\n\n"
cat > /tmp/spam.message-$instanceid
/opt/bin/sa-learn --spam /tmp/spam.message-$instanceid
read -s -n 1 -p "Press any key to continue...."
Let's examine the logic and functionality. The first line establishes a unique
session ID for application access. If you have multiple users logging on with the
same user name this will help keep data straight between sessions. The
clean_session function needs to be declared at the beginning of the script for use with the
trap statement. The
trap statement will run the
whenever it detects that the user entered Ctrl-C (interrupt signal or SIGINT).
For the purpose of establishing a the data-entry application, you'll use an infinite
while loop. Once data is entered the first time and the end of the loop is reached,
the loop just starts over and is ready for more data entry. This is where the
clean_session function comes into play. If users want to exit, as per the
instructional printouts, they type Ctrl-C. Normally, this would drop them into a
shell, but since you want to isolate their usage to this application, you'll invoke
clean_session function, which will clean up their temporary file (if it exists)
and log them off. The body of the
while loop just accepts input (the
feeds the data into sa-learn and cleans up the temporary file.
For this example, you will need to modify the sudoers file to allow your user root access to sa-learn; the actual location of sa-learn might vary with your installation.