首页 > 解决方案 > Bash 在 || 之后执行多个命令 如果非 0

问题描述

我的脚本中有一行代码以确保存在 conda 环境,如果不存在,则安装环境并下载环境中程序的数据库。我有这个代码:

   test -d ~/miniconda3/envs/antismash_v5 || echo "Conda environment does not exist. Initialising conda environment......" && conda env create -f antismash.yml &&  conda activate antismash_v5 && download-antismash-databases

但这只是执行第一个之后的所有内容,&&无论test函数之前是否返回非零||。我怎样才能让它按预期工作?

标签: bashshell

解决方案


test您可以通过使用 bang来否定!并将其余命令包含在if语句中,这样您就不需要{ }

if ! test -d ~/miniconda3/envs/antismash_v5; then
  command_here &&
  another_command_here &&
  some_more_commands_here &&
  do_more_commands here &&
  .....
fi 

help test

help test | grep '^[[:blank:]]*!'

输出

! EXPR True if expr is false.


推荐阅读