2

我需要不时查看日志文件的特定行:

$ head -10 log.txt|tail -1  # to view line 10 of log.txt

然后我v在我的函数中写了一个bashrc让生活更轻松的函数:

$ v 10

好的,也许我在这里有点分裂:我也想忽略这个空间:

$ v10

我知道的唯一方法是定义很多别名:

alias v1='v 1'
alias v2='v 2'
alias v3='v 3'
alias v4='v 4'
...

有什么好的方法吗?


感谢@Chirlo 和@anishsane 的想法。

这是我的最终版本,基于 @anishsane 的一些修复:

eval "`declare -f command_not_found_handle | sed s/command_not_found_handle/command_not_found_handle_orig/`"
command_not_found_handle(){
    if expr match "$1" "v[0-9][0-9]*" >/dev/null ; then
       v ${1:1}
       return $?
    fi
    command_not_found_handle_orig "$@"
}
4

2 回答 2

5

检查command_not_found_handle()如果你有bash> 4,你可以覆盖它来处理这种情况。当你输入v10并且 bash 无法解析它时,这个函数将被v10作为第一个参数调用,你抓住它并在那里做你的事情。

于 2013-04-02T10:58:39.983 回答
2

这不是答案,而是提示:

当您在 ubuntu 上发出一些命令时,如果没有安装该程序,则 shell 调用它自己的处理程序,说

The program 'something' is currently not installed. You can install it by typing:
sudo apt-get install something

您可以尝试找到执行此操作的那个程序。然后挂钩您的代码,它将查看命令是否与正则表达式匹配v[0-9]*,然后v $lineNumber根据命令的某些解析执行...


根据 chepner 的评论,这里是更新:

在您的 .bashrc 中添加以下内容:

eval "`declare -f command_not_found_handle | sed s/command_not_found_handle/command_not_found_handle_orig/`"

command_not_found_handle(){
    if expr match "$1" "v[0-9]*" >/dev/null ; then
       v ${1:1}
       return $?
    fi
    command_not_found_handle_orig "$@"
}
于 2013-04-02T07:53:44.437 回答