2014-06-09 77 views
1

在bash处理之前,有没有办法在交互模式下预处理输入bash的行?bash处理之前的预处理行

我想介绍一些自定义速记语法来处理长路径。例如,我不想写'cd/one/two/three/four/five',而是想写'cd /.../five'之类的东西,然后我的预处理脚本将会替换为前一个命令(如果一个唯一的目录'5'存在于/下面的某处)。

我找到了http://glyf.livejournal.com/63106.html,它描述了如何在命令执行前执行钩子函数。但是,该方法不允许更改要执行的命令。

回答

0

对于所有命令,通常没有这样做的好方法。

但是,您可以通过使用函数覆盖它们来执行特定命令。为了您的cd情况下,你可以坚持这样的事情在你的.bashrc

cd() { 
    path="$1" 
    [[ $path == "/.../five" ]] && path="/one/two/three/four/five" 
    builtin cd "$path" 
} 
0

bash 4或更高版本,可以使用globstar选项。

shopt -s globstar 
cd /**/five 

假设five是一个独特的目录。

0

简短的回答是不是直接。正如您发现的那样,PROMPT_COMMAND环境变量允许您在显示提示之前发出命令,这可以允许一些非常有创意的用途,例如, Unlimited BASH History,但没有任何东西可以让你直接解析和替换输入。

你想要做什么可以使用.bashrc中的函数和别名来完成。一种方法是使用findutils-locate或简单地使用find命令在当前工作目录下搜索椭圆路径中最后一个组件的目录,然后提供完整路径作为回报。但是,即使使用索引编制,locate也需要一些时间,并且根据深度,find本身可能会降低通用性,以便为所有可能的目录执行此操作。但是,如果你有一个特定的目录列表,你希望实现这样的目标,那么解决方案将是可行的并且相对容易。

要提供任何类型的原型或更多细节,我们需要更多地了解您打算如何使用路径信息以及是否可以在单个命令中提供多个路径。

如果目录five是非唯一的,则会出现另一个问题...