如何在 bash 中围绕现有命令添加包装器?

How to add wrapper around existing command in bash?

有什么方法可以添加或包装现有命令吗?

例如,如果有人 运行s git pull 真的 运行s git pull --rebase?

当然,我们已经为它写了一个别名,但问题是人们没有使用这个别名。

有什么方法可以检测到 git pull 是 运行 并添加到其中吗?

理想的解决方案?

$ git pull

回声

$ This is not the prefered way of pulling down new code. Did you mean to run ~/my_scripts/git_pull_script.sh?

然后取消原来的git拉。

可能有一种更简单的方法来做这种事情,但四处搜索并没有在调整现有命令方面取得太多成果。

您可以使用命令替换运算符 $(command) 来 运行 命令并捕获其输出。

例如,如果你想运行一个命令并捕获它的输出,你可以使用下面的:

$(command)

如果您想 运行 命令并捕获其输出,这将很有用。

要具体化@Barmar 的答案,您可以编写如下脚本:

echo 
if [ "" == "pull" ] ;then
    echo This is not the prefered way of pulling down new code. Did you mean to run ~/my_scripts/git_pull_script.sh?
else
    git $*
fi

将其命名为 git 并将其放置在一个目录中,该目录位于 git 二进制文件实际位置之前的用户的 PATH 变量中。