5

问题:客户 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 对话的脚本中- 与 bash 对话并取回命令列表。

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

 apropos shortcut

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

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

4

1 回答 1

5

您可能想要的是覆盖 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 进行比较,如果匹配,则显示适当的。

于 2008-12-19T01:51:40.677 回答