2012-07-11 43 views
2

我想改变我的Bash配置,所以当我在命令提示符下键入内容(例如foo bar)时,它确实会执行h foo bar如何在每个Bash命令的开头添加一些内容?

我想这样做,因为我经常使用hilite(别名为h)将红色的stderr颜色化,我想使此行为成为永久性的。

其他使用我看到会使用Git进行交互,因为我写很多的命令,如:

git status 
git add ... 
git commit ... 

我想我可以使用preexec_invoke_exec 的命令运行之前执行的东西,但我不”我知道如何更改 命令或阻止它执行。

任何想法?

+3

可能的复制[这个线程](http://superuser.com/questions/175799/does-bash-have-a-hook-that-is-run-before-executing-a-command) – 2012-07-11 15:14:26

+2

也看看[这个线程] (http://serverfault.com/questions/59262/bash-print-stderr-in-red-color) – 2012-07-11 15:18:34

+0

@rody_o,我见过他们两个。这不是同一个问题 - 我知道如何使用'preexec_invoke_exec'在命令之前执行某些操作。但在这里我还需要一种方法来阻止Bash在提示符下运行键入的命令(因为我想运行另一个命令)。 – mik01aj 2012-07-11 15:20:54

回答

0

要从你指定的那个运行一个不同的命令,你最好的办法可能是寻找一个命令的bash函数被捕获。

我不知道“HILITE”任何事情,但如果安装了一个二进制文件,在,说/usr/bin/hilite,你可以使用:

git() { 
    /usr/bin/hilite /usr/bin/git "[email protected]" 
} 

所以...当你在bash提示符运行git ,bash实际上会运行hilite,使用/usr/bin/git和其余的命令行参数作为h的参数。

请注意,这应该在传统的Bourne shell以及bash中工作。

+0

不错,但这并不能解决问题。我希望'h'能运行所有**命令,而不仅仅是git。我只是把git作为一个替代的例子。 – mik01aj 2012-07-11 15:35:46

2

您可以通过绑定return键来为您插入h来实现此目的。您可以通过添加以下内容到.input.rc做到这一点:

Return: "\C-ah\ \n" 

或者把这个bind.bashrc

bind 'RETURN: "\C-ah \n"' 

(荣誉给these guys)。

有一些捕获物:显然,它只是纯粹的,这可能会在地方给出一些非常奇怪的行为(我现在无法想象一个体面的例子),所以我不会说这是'好的'以任何方式抨击。

我会亲自跳过hilite并保持纯粹的bash。所以取而代之,尽量东西寻找一种方式来追加到每一个命令,以便为stderr流的彩色echo/printf重定向......但这是偏好的问题我猜的:)

+0

+1!很好找!它依赖于终端,但对于99.9%真正想要这样做的人来说,仍然应该足够了。顺便说一句,我同意这应该保持在bash中,如果可能的话。也许OP应该切换到ZSH? :-) – ghoti 2012-07-11 16:04:23

+0

如果黑客攻击你的shell:yup :) – 2012-07-11 16:06:25

相关问题