цепочка терминальных команд, каждая из которых выполняется, если файл существует

Я искал это в других вопросах, но не мог найти ничего подобного. Тем не менее, это кажется весьма полезной вещью.

Я хочу создать фрагмент / псевдоним ZSH для git add . так что он выполняет три задания в цепочке:

  1. если путь ./readme.md существует, запустите doctoc (глобально установленное приложение CLI из npm). Если это не так , ничего не делайте и переходите к следующему шагу.
  2. если существует путь ./changelog.md , запустите на нем другой локальный CLI-скрипт (скажем, под названием changelogupd ). Если это не так , ничего не делайте и переходите к следующему шагу.
  3. независимо от предыдущих результатов, затем запустите git add .

Теперь в настоящее время у меня есть две команды, .zshrc псевдониме .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. нет readme но есть changelog , плюс git add .

)

или есть более простой способ (или библиотека CLI npm или какая-либо секретная команда терминала)?

Кстати, это должно быть запущено на терминале Mac. Спасибо.

Просто напишите функцию:

 my-git-add-.() { [ -e readme.md ] && doctoc readme.md [ -e changelog.md ] && changelogupd changelog.md git add . } 
 path-exists ./readme.md && { doctoc readme.md; :; } || \ path-exists ./changelog.md && { changelogupd changelog.md; :; } git add . 

Вам нужно сгруппировать команды для достижения желаемого. Оператор : был добавлен, чтобы обеспечить истинное завершение, когда doctoc может выйти из строя.