【问题标题】:bash script to show compatible commands based on "Windows-speak"bash 脚本显示基于“Windows-speak”的兼容命令
【发布时间】:2008-12-19 01:25:40
【问题描述】:

问题:客户 X 是一位 Windows 用户,她希望能够在通过 shell 登录到她的 RedHat 盒子时使用助记关键字或“标签提示”来触发预打包的 bash 命令.

示例: 客户 X 使用 ssh 登录主机并想做一些常规文件操作。她希望能够打字

copy file

并取回可供选择的预制填充空白 bash 命令列表

cp <@source@> <@dest@>               ### simple copy
cp -R <@startdir@>  <@destdir@>      ### recursive copy

然后她希望能够选择其中一项,填写空白,然后按 Enter 键运行命令。

客户 X 愿意提前指定她可能想要使用的命令(在 windows-speak 中),然后聘请开发人员将这些命令翻译成 bash 命令,然后将它们放在一个脚本中,让她将 windows-speak 与 bash 对话并取回命令列表。

注意:客户 X 不喜欢 apropos,因为它假定熟悉 bash 中使用的术语,而不是 windows-speak。例如:

 apropos shortcut

没有给她任何关于创建符号链接的信息(尽管这正是她想要的),因为她不知道在 linux 中调用了哪些 windows 快捷方式。显然,windows 的概念不会超过 100%,所以她最终必须学习,但她是一个忙碌的人,并要求这样做是为了“缓解”她对 linux 的理解。

问题:开始这样的事情的最佳方式是什么?是否已经有一个 perl、python、ruby 脚本可以做这样的事情? bash中有没有可以模拟这种功能请求的东西?

【问题讨论】:

  • +1 表示格式非常正确的问题。一个很好的榜样。 (+1 表示您的客户想要学习而不是想要复制)

标签: linux bash search intellisense usability


【解决方案1】:

您可能想要的是覆盖 bash 的 command-not-found 处理程序。这是安装处理程序的标准 Ubuntu 安装中 /etc/bash.bashrc 中的部分:

...
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found ]; then
        function command_not_found_handle {
                # check because c-n-f could've been removed in the meantime
                if [ -x /usr/lib/command-not-found ]; then
                   /usr/bin/python /usr/lib/command-not-found -- $1
                   return $?
                else
                   return 127
                fi
        }
fi
...

实际上,如果找不到命令,则以该命令作为参数执行用户指定的程序。对于 Ubuntu,它是一个 Python 程序,用于检查用户键入的命令是否是可以安装的有效应用程序,如果是,则通知用户他/她可以安装它。

您可能想要做的是将它与命令和用法字符串的 hashref 进行比较,如果匹配,则显示适当的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多