命令/别名可以变量吗?

时间:2013-04-02 06:52:45

标签: shell alias bash

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

$ 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 "$@"
}

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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 "$[@]"
}