如何在每个Bash命令的开头添加一些东西?

时间:2012-07-11 15:00:11

标签: linux bash

我想更改我的Bash配置,所以当我在命令提示符中输入内容(例如foo bar)时,它确实会执行h foo bar

我想这样做是因为我经常使用hilite(别名为h)将stderr用红色着色,我希望这种行为永久化。

我看到的其他用途是与Git交互,因为我写了很多命令,如:

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

我想我之前可以使用preexec_invoke_exec来执行某些操作 命令正在运行,但我不知道如何更改 命令或阻止它执行。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以通过绑定return键为您插入h来实现此目的。您可以将此添加到.input.rc

Return: "\C-ah\ \n"

或将此bind放入.bashrc

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

(感谢these guys)。

有一些捕获:很明显,这只是bash-only,这可以在某些地方给出一些非常奇怪的行为(我现在想不出一个像样的例子),所以我不会说这是'好的'以任何方式抨击。

我个人会跳过hilite并保持纯粹bash。因此,请尝试寻找一种方法将追加内容添加到每个命令,以便将stderr流重定向到彩色echo / printf ...但这是一个偏好的问题,我猜:)

答案 1 :(得分:0)

要从你指定的命令运行一个不同的命令,你最好的选择可能是要捕获命令的bash函数。

我对“hilite”一无所知,但是如果它安装了二进制文件,比如/usr/bin/hilite,你可以使用:

git () {
  /usr/bin/hilite /usr/bin/git "$@"
}

所以...当你在bash提示符下运行git时,bash将实际运行hilite,使用/usr/bin/git和其余的命令行参数作为{{{1}的参数1}}。

请注意,这应该适用于传统的Bourne shell以及bash。