创建基于应用程序的终端会话

作者:Andy Carlson

我最初在工作环境中使用计算机的经历之一是使用 Wyse 终端访问基于控制台的应用程序进行数据输入。 过了一段时间我才了解到 UNIX 中的终端以及它们的工作方式。 一旦我理解了它,我就想创建自己的自包含应用程序,该应用程序与 telnet 或 SSH 会话相关联。

我发现实现此目的的方法涉及使用trap命令和一些(看似)密切的循环。示例代码将插入到您希望授予应用程序访问权限的用户的 .bashrc 文件中。 示例代码用于将垃圾邮件消息条目输入到 Spam Assassin 的 sa-learn 应用程序中。


instanceid="$RANDOM"
clean_session() {
    [[ -f /tmp/spam.message-$instanceid ]] && rm /tmp/spam.message-$instanceid
    exit
}


trap clean_session SIGINT

while true; do
    clear
    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
    clear
    printf "Processing....\n\n"
    /opt/bin/sa-learn --spam /tmp/spam.message-$instanceid
    printf "\n\n"
    rm /tmp/spam.message-$instanceid
    read -s -n 1 -p "Press any key to continue...."
done
exit

让我们检查一下逻辑和功能。 第一行建立应用程序访问的唯一会话 ID。 如果有多个用户使用相同的用户名登录,这将有助于保持会话之间的数据清晰。 需要在脚本开头声明clean_session函数,以便与以下trap语句一起使用。 每当检测到用户输入 Ctrl-C(中断信号或 SIGINT)时,trap语句将运行clean_session函数。

为了建立数据输入应用程序,您将使用无限while循环。 第一次输入数据并到达循环末尾后,循环就会重新开始并准备好进行更多数据输入。 这就是clean_session函数发挥作用的地方。 如果用户想要退出,按照教学打印输出,他们可以键入 Ctrl-C。 通常,这会将他们放入 shell 中,但由于您希望将他们的使用隔离到此应用程序,因此您将调用clean_session函数,该函数将清理他们的临时文件(如果存在)并注销他们。 while循环的主体只是接受输入 (cat 语句),将数据馈送到 sa-learn 并清理临时文件。

对于此示例,您需要修改 sudoers 文件以允许您的用户拥有对 sa-learn 的 root 访问权限; sa-learn 的实际位置可能因您的安装而异。

Andy Carlson 在 IT 领域工作了 15 年,从事网络和服务器管理以及偶尔的编码工作。 他很感激选择了自己热爱、成长并从中学习的职业。 他目前与妻子、三个女儿和一个儿子住在俄亥俄州辛辛那提市。 他的家人目前正在进行国际收养两个孩子的过程。 他喜欢弹吉他、编码以及与家人和朋友共度时光。

加载 Disqus 评论