在命令参数中注入bash条件
我想执行一个命令,将逻辑操作的结果作为参数注入。 基本上,条件充当三元运算符$VAR?40:30,结果设置为参数 当$VAR为“true”时,需要执行以下命令: pytest-cov在=40以下失效 我试过类似的东西 pytest-cov在=${[$VAR='true']]和&40 | | 80}测试下失败/ 但是我得到了一个错误的替换bash有一个三元运算符,但它只能用于算术表达式,所以在比较字符串时不能使用它 您需要设置一个变量,然后替换它在命令参数中注入bash条件,bash,shell,sh,Bash,Shell,Sh,我想执行一个命令,将逻辑操作的结果作为参数注入。 基本上,条件充当三元运算符$VAR?40:30,结果设置为参数 当$VAR为“true”时,需要执行以下命令: pytest-cov在=40以下失效 我试过类似的东西 pytest-cov在=${[$VAR='true']]和&40 | | 80}测试下失败/ 但是我得到了一个错误的替换bash有一个三元运算符,但它只能用于算术表达式,所以在比较字符串时不能使用它 您需要设置一个变量,然后替换它 if [[ $VAR = true ]] then
if [[ $VAR = true ]]
then fail_under=40
else fail_under=80
fi
pytest --cov-fail-under="$fail_under" tests/
bash有一个三元运算符,但它只能在算术表达式中使用,所以在比较字符串时不能使用它
您需要设置一个变量,然后替换它
if [[ $VAR = true ]]
then fail_under=40
else fail_under=80
fi
pytest --cov-fail-under="$fail_under" tests/
您可以输出值
pytest --cov-fail-under=$(if [[ $VAR = 'true' ]]; then echo 40; else echo 80; fi) tests/
您可以输出值
pytest --cov-fail-under=$(if [[ $VAR = 'true' ]]; then echo 40; else echo 80; fi) tests/
您还可以扩展pytest并自定义cov_fail_under值的设置。在项目或测试根目录中创建具有以下内容的conftest.py文件:
导入操作系统
导入pytest
@pytest.hookimpltryfirst=True
def pytest_配置配置:
cov_plugin=config.pluginmanager.get_plugin_cov
var=os.environ.getVAR,无
允许用户通过在=x下传递“-cov fail”来覆盖命令行中的值`
如果cov_plugin不是None,并且下面的config.option.cov_fail_是None:
如果var==true,则值=40,否则为30
cov_plugin.options.cov_fail_under=value
现在正在运行
$ export VAR=true
$ pytest --cov=stuff
将在=40下自动应用cov\u fail\u,而在VAR unset或VAR=false下运行时,将使用30作为默认值。要用x覆盖该值,请显式传递-cov fail-under=x。您还可以扩展pytest并自定义cov\u fail\u under值的设置。在项目或测试根目录中创建具有以下内容的conftest.py文件:
导入操作系统
导入pytest
@pytest.hookimpltryfirst=True
def pytest_配置配置:
cov_plugin=config.pluginmanager.get_plugin_cov
var=os.environ.getVAR,无
允许用户通过在=x下传递“-cov fail”来覆盖命令行中的值`
如果cov_plugin不是None,并且下面的config.option.cov_fail_是None:
如果var==true,则值=40,否则为30
cov_plugin.options.cov_fail_under=value
现在正在运行
$ export VAR=true
$ pytest --cov=stuff
将在=40下自动应用cov\u fail\u,而在VAR unset或VAR=false下运行时,将使用30作为默认值。要用x覆盖该值,请在=x下显式传递-cov fail。bash代码段存在两个问题: 第一个问题:${}是用于指定变量名的语法。换句话说,${something}===$something 第二个问题:&&和| |后面必须跟一个命令。[[$VAR='true']&&40表示如果$VAR为'true',则执行命令40 所以你的台词应该是这样的: pytest-cov在=$[[$VAR='true']]和&echo 40 | | echo 80测试下失败/ bash中的三元运算符仅在数值范围内工作,并且仅适用于数值
而且,这与pytest本身无关;我正在删除该标记。您的bash代码片段存在两个问题: 第一个问题:${}是用于指定变量名的语法。换句话说,${something}===$something 第二个问题:&&和| |后面必须跟一个命令。[[$VAR='true']&&40表示如果$VAR为'true',则执行命令40 所以你的台词应该是这样的: pytest-cov在=$[[$VAR='true']]和&echo 40 | | echo 80测试下失败/ bash中的三元运算符仅在数值范围内工作,并且仅适用于数值
而且,这与pytest本身无关;我正在删除该标签。下面一切都好,或者您可以做…$真实echo中的案例$var 40;;*回声80;;以撒。。。祝你好运。下面一切都好,或者你可以做…$真实echo中的案例$var 40;;*回声80;;以撒。。。祝你好运。据我所知,在一个Pipfile脚本中不能执行多个命令。据我所知,在一个Pipfile脚本中不能执行多个命令。value:'$if'你没有在shell中运行它。value:'$if'你没有在shell中运行它。@room13你从来没有提到过pipenv。我分享的是bash,正如您在问题上加了标签一样,它起了作用。如果问题出在pipenv身上,那完全是另一回事,你应该在你的问题中提到这一点。@room13你从来没有提到过pipenv。我分享的是bash,正如您在问题上加了标签一样,它起了作用。如果问题出在pipenv上,那完全是另一回事,你应该在问题中提到这一点。