在运行之前修改 shell 命令

在运行之前修改 shell 命令

有相当多的命令需要子命令(例如,git、 或task来自taskwarrior)。有时,我有一个终端窗口完全用于使用不同的子命令运行此命令。我希望我不必总是需要键入主命令。让我用taskwarrior(“待办事项列表管理器”)的一个例子来解释这一点:

$ task add proj:job +hard Refactor the API -- Add task to project 'job' tagged 'hard'
$ task proj:job +easy add prio:H Fix typo in README -- Tag is 'easy', priority 'high'
$ task proj:job next -- List tasks in project 'job', ordered by 'urgency'

正如您所看到的,子命令(例如或)的放置task位置非常灵活。现在,如果我正在从事某个项目(比如“工作”),那么我想深入研究。就像是:addnext

$ CONTEXT="task proj:job"
[task proj:job] $ add +hard Refactor the API
[task proj:job] $ +easy add prio:H Fix typo in README
[task proj:job] $ next

这个问题的标题非常宽泛(建议你可能希望在执行命令之前运行 sed 脚本)。不过,我会很高兴看到以下之一:

  1. 我可以设置一些变量(如CONTEXT示例中所示),在运行之前,将其值添加到每个命令之前。
  2. CONTEXT或者,甚至更好的是,可以在开始输入命令之前在命令行中填写的值。这样,我偶尔可以按退格键,或者Ctrl-U如果我想在上下文之外运行命令。

问。是否有一个 shell(最好是类似 bash 的,例如zsh)具有所描述的功能?

答案1

解决您的工作流程而不是提出的精确问题,我会在这种情况下使用一个函数:

t() { task proj:job "$@"; }

t add +hard Refactor the API
t +easy add prio:H Fix typo in README
t next

函数相对于别名的优点是占位符可以放在命令模板中的任何位置,而不仅仅是放在行尾。

从你关于想要避免领先的开销的命令来看t,我想你可以尝试这样的事情:

add() { task proj:job add "$@"; }
next() { task proj:job next; }

add +hard Refactor the API
add +easy prio:H Fix typo in README
next

相关内容