在命令参数中注入 bash 条件
Inject bash condition in command parameter
我想执行一个命令,将逻辑操作的结果作为参数注入。
基本上,条件充当三元运算符 $VAR ? 40 : 30
,结果设置为参数
当$VAR为'true'时需要执行以下命令:
pytest --cov-fail-under=40
我试过
pytest --cov-fail-under=${[[ $VAR = 'true' ]] && 40 || 80} 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
值。在您的项目或测试根目录中创建一个 conftest.py
文件,内容如下:
import os
import pytest
@pytest.hookimpl(tryfirst=True)
def pytest_configure(config):
cov_plugin = config.pluginmanager.get_plugin("_cov")
var = os.environ.get("VAR", None)
# allow user to override the value from command line by passing `--cov-fail-under=x`
if cov_plugin is not None and config.option.cov_fail_under is None:
value = 40 if var == "true" else 30
cov_plugin.options.cov_fail_under = value
现在运行例如
$ export VAR=true
$ pytest --cov=stuff
将自动应用 cov_fail_under = 40
,而 运行 VAR
未设置或 VAR=false
将使用 30 作为默认值。要使用 x
覆盖该值,请显式传递 --cov-fail-under=x
。
您的 bash 代码段有两个问题:
第一个问题:${}
是指定变量名的语法。换句话说,${something}
=== $something
第二个问题:&&
和||
后面必须跟一个命令。 [[ $VAR = 'true' ]] && 40
表示“如果 $VAR 是 'true' 执行 命令 40
.
所以你的台词应该是这样的:
pytest --cov-fail-under=$([[ $VAR = 'true' ]] && echo 40 || echo 80) tests/
bash 中的三元运算符仅适用于 (( ))
且仅适用于数值。
(此外,这与 pytest 本身无关;我正在删除该标签。)
我想执行一个命令,将逻辑操作的结果作为参数注入。
基本上,条件充当三元运算符 $VAR ? 40 : 30
,结果设置为参数
当$VAR为'true'时需要执行以下命令:
pytest --cov-fail-under=40
我试过
pytest --cov-fail-under=${[[ $VAR = 'true' ]] && 40 || 80} 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
值。在您的项目或测试根目录中创建一个 conftest.py
文件,内容如下:
import os
import pytest
@pytest.hookimpl(tryfirst=True)
def pytest_configure(config):
cov_plugin = config.pluginmanager.get_plugin("_cov")
var = os.environ.get("VAR", None)
# allow user to override the value from command line by passing `--cov-fail-under=x`
if cov_plugin is not None and config.option.cov_fail_under is None:
value = 40 if var == "true" else 30
cov_plugin.options.cov_fail_under = value
现在运行例如
$ export VAR=true
$ pytest --cov=stuff
将自动应用 cov_fail_under = 40
,而 运行 VAR
未设置或 VAR=false
将使用 30 作为默认值。要使用 x
覆盖该值,请显式传递 --cov-fail-under=x
。
您的 bash 代码段有两个问题:
第一个问题:${}
是指定变量名的语法。换句话说,${something}
=== $something
第二个问题:&&
和||
后面必须跟一个命令。 [[ $VAR = 'true' ]] && 40
表示“如果 $VAR 是 'true' 执行 命令 40
.
所以你的台词应该是这样的:
pytest --cov-fail-under=$([[ $VAR = 'true' ]] && echo 40 || echo 80) tests/
bash 中的三元运算符仅适用于 (( ))
且仅适用于数值。
(此外,这与 pytest 本身无关;我正在删除该标签。)