在 bash 中分配一个回调/钩子,以便每当运行一个命令时,另一个命令都会先运行?

在 bash 中分配一个回调/钩子,以便每当运行一个命令时,另一个命令都会先运行?

任何时候我跑步ssh(或scplftp),我都想gpg-connect-agent updatestartuptty /bye第一个跑。(说来话长。)

目前,我在.bashrc中定义了一个函数:

ssh()
{
  gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1
  $(which ssh) "$@"
}

这工作得很好,但我想象如果在另一个 ssh 已经有类似别名的系统上使用,可能会出现可移植性问题。

有没有办法定义预执行“回调”ssh而不覆盖ssh命令本身?(我知道您可以trap DEBUG在每个命令之前使用它来运行给定的命令,但我想将其限制为我需要的命令。)

答案1

我建议这样写:

ssh()
{
  gpg-connect-agent updatestartuptty /bye &>/dev/null
  command ssh "$@"
}

请参阅help command此处了解更多详情。

并且,没有其他“预回调机制”。如果有,你所做的基本上就是“它”。

相关内容