【问题标题】:How to create a CLI program with "shell prompt"?如何使用“shell 提示符”创建 CLI 程序?
【发布时间】:2011-04-10 01:26:44
【问题描述】:

我是编程新手。以下任务看起来很简单,但我不知道该怎么做。如果有人可以给我一些指导,不胜感激。

我正在使用 Linux 操作系统。我想创建一个 CLI 程序并让用户在 shell 终端中运行它。我打算使用 Bash shell 脚本来创建这个程序,但 C++ 或 Perl 也应该没问题。 CLI 程序将接受来自用户的命令,执行它,然后选择性地在屏幕上显示结果摘要。

当 CLI 程序运行时,我想让它总是在 shell 终端的左侧显示一个“shell 提示符”,就像 Bash shell 提示符一样。提示表示 CLI 程序正在等待用户输入命令并按回车键。

[AAA@Bash user]$ # This is Bash shell
[AAA@Bash user]$./CliApp.sh
CliApp > # The CLI program is running, user can type in command here
CliApp > exit
[AAA@Bash user]$ # Now the user has returned to the Bash shell

我想我知道如何在屏幕上打印一些东西并从用户那里获得输入,但我发现它看起来很不专业。我相信有更好的方法来创建这种程序。

谁能给我一些指导如何创建这种程序?感谢您是否可以给我任何示例程序的链接。谢谢。

【问题讨论】:

  • 展示你目前拥有的东西并提出具体问题。
  • 究竟是什么,您认为看起来不专业吗?您提供的示例看起来就像从 shell 执行命令一样。你有不专业的组件的例子吗?
  • 很抱歉给您带来了困惑。我想为我的程序创建一个 shell 提示符。提示应该记住用户当前所在的“环境”。示例是 Cisco IOS 软件。用户首次登录时,提示符为“Router>”。用户输入密码后,它变成“Router#”。如果用户输入命令“配置终端”。它将变成“Router(config)#”。如果用户想配置一个接口,提示符会变成“Router(config-if)#”。 “环境”将决定用户可以使用哪些命令。某些命令只能在某些环境中执行。
  • 只是为了帮助您进行研究,这种接口也可以称为 REPL(Read Eval Print Loop),我怀疑它可能是 CLI 的子类。
  • 如果您使用 C 编写应用程序,那么您可以使用 readline 库来获取典型的用户历史记录和行编辑功能。不确定bash是否存在类似的东西......

标签: bash shell command-line prompt


【解决方案1】:

通过 shell 脚本编写命令解释器对我来说听起来有点多余,因为您必须使用命令解释器(bash、csh、sh 或其他东西)才能做到这一点。

如果您正在寻找,可以自定义您的 bash 提示符。

您可以使用一些 C/C++ 库来帮助您构建自己的命令处理器/解释器,其中包括 fancy 功能,例如制表符补全。你应该看看这些:

【讨论】:

  • “自定义 bash” 在这里可能意味着简单地创建函数(或将脚本放在 PATH 上)在应用程序中执行您想要的操作,但直接在 bash 中。 (例如,我每天都使用 bash/zsh,但在 PATH 上的 my own library 提供了一堆额外的命令。)
【解决方案2】:

您是否正在寻找以下内容?

#!/bin/bash                                                                                                    
input=""
while [ "$input" != "exit" ]
do
    echo -n "cliApp($mode) > " && read input
    if [ "$input" = "config" ]
    then
        mode="config"
    elif [ "$input" = "up" ]
    then
        mode=""
    elif [ "$input" = "exit" ]
    then
    break
    else
        if [ "$mode" = "config" ]
        then
            if [ "$input" = "list" ]
            then
                echo "ABCD"
            else
                echo "Invalid"
            fi
        else
            echo "Invalid"
        fi
    fi
done

exit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多