一串终端命令,每个命令在文件存在时运行

一串终端命令,每个命令在文件存在时运行

我在其他问题中查找过此内容,但似乎找不到类似的内容。然而,这似乎是非常有用的东西。

我想为我的 ZSH 片段/别名设置一个,git add .以便它在链中完成三项工作:

  1. 如果路径./readme.md存在,则运行医生(从 npm 全局安装 CLI 应用程序)。如果没有,不执行任何操作并跳到下一步。
  2. 如果路径./changelog.md存在,则在其上运行不同的本地 CLI 安装脚本(假设名为changelogupd)。如果没有,不执行任何操作并跳到下一步。
  3. 不管之前的结果如何,然后运行git add .

现在,我有像这样链接在别名中的命令.zshrc它可以工作:

path-exists ./readme.md && doctoc readme.md && git add . || git add .

但我想要:两次路径检查和条件调用加上git add .


顺便一提。是path-exists路径存在-cli,通过 npm 全局安装。

三个命令链似乎很棘手,下面是一个无意义的混搭,以显示我正在寻找的粗略内容:

path-exists ./readme.md && doctoc readme.md && git add . || path-exists ./changelog.md && changelogupd changelog.md && git add . || git add .

我是否应该尝试使用双管覆盖所有四种情况:

(

  1. readme存在、不changelog、加上git add .
  2. readme不存在、不changelog、加上git add .
  3. 两者都readme存在changelog,加上git add .
  4. 没有readmechangelog现在,再加上git add .

还是有更简单的方法(或 npm CLI 库或一些秘密终端命令)?

顺便说一句,这是在 Mac 终端上运行的。谢谢。

答案1

只需写一个函数:

my-git-add-.() {
  [ -e readme.md ] && doctoc readme.md
  [ -e changelog.md ] && changelogupd changelog.md
  git add .
}

答案2

path-exists ./readme.md    && { doctoc       readme.md;    :; } || \
path-exists ./changelog.md && { changelogupd changelog.md; :; }
git add .

您需要对命令进行分组才能实现您想要的效果。添加该:语句是为了在 doctoc 可能失败时提供真正的结局。

相关内容