【问题标题】:How can I block a command from running in my terminal using zsh?如何使用 zsh 阻止命令在我的终端中运行?
【发布时间】:2023-01-11 03:16:20
【问题描述】:

我基本上想阻止我的电脑在我的终端上运行这个命令:

git checkout master

我的第一个想法是添加一个别名,但别名不会只抓取整个命令的第一部分。

基本上,如果我运行命令,我想回显一条消息,没什么特别的。

所以我想知道这样做的最佳方法是什么?

【问题讨论】:

  • 您可能想查看有关隐藏内置命令的 Git 别名的问题。然后你可以将checkout定义为别名,它首先检查被检出的分支是否是master,如果不是,则只运行“真实的”git commit命令。
  • 或者,您可以简单地用标签替换分支负责人。不过,这听起来像是一个 XY 问题:为什么要阻止检出任何特定分支,更不用说 master 了?
  • zsh而言,命令git;其余的只是争论。您可以定义一个隐藏 git 的 shell 函数,并在继续执行常规 git 命令或做一些不同的事情之前检查其参数,但这可能需要基本上复制 git 的参数解析。
  • 是的,这或多或少是我在想的,但我不确定如何继续编写一个检查参数的函数。我认为有某种方法可以像钩子一样检查所有传入的命令,如果其中任何命令是“git checkout master”,则回显其他内容。我只是不确定如何进行。我不想允许检出 master 的原因是因为我无权删除该分支并且在我应该检出开发分支时我一直在检出它。
  • 您可以定义一个 preexec 挂钩,但它只会将 git checkout master 作为参数,让您将命令行拆分为单独的参数,然后执行与函数相同的逻辑命名为git(除了该函数已经将checkoutmaster作为单独的参数)。

标签: git terminal zsh oh-my-zsh


【解决方案1】:

如果您只需要处理一小组参数,@chepner 建议的 git 的影子函数看起来很简单:

git(){
  if [[ "$1 $2" == "checkout master" ]]; then
    print "never mind"
    return 1
  fi
  =git "$@"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 2014-10-21
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多