pytest bash 脚本中的引号

Quotation marks inside bash script for pytest

我尝试编写一个脚本来帮助根据用户输入选择 pytest 选项。 不幸的是,由于与标记相关的最新参数,脚本总是失败。

我怀疑标记选项中的引号是问题的根源。不幸的是,我找不到任何解决方法。

这里是 MWE:

test.sh

的内容
#!/bin/bash

options=("-v")
options+=("-m \"not dummy\"")

echo "about to launch pytest ${options[@]}"
pytest ${options[@]}

test_dummy.py的内容:

import pytest

@pytest.mark.dummy
def test_dummy():
    assert(True)

现在 运行 test.sh 脚本的输出:

about to launch pytest -v -m "not dummy" =============================================================================================================================== test session starts =============================================================================================================================== platform linux -- Python 3.6.4, pytest-3.3.2, py-1.5.2, pluggy-0.6.0 -- /home/[...]/anaconda3/bin/python cachedir: .cache rootdir: /home/[...]/pytest, inifile: plugins: cov-2.5.1

========================================================================================================================== no tests ran in 0.00 seconds =========================================================================================================================== ERROR: file not found: dummy"

当然运行生成的命令

pytest -v -m "not dummy"

完美运行。如何克服这个问题

提前致谢

实际上,找到了解决这个问题的方法。显然,最简单的解决方案是 "recast" 将整个命令作为一个字符串,然后使用 eval 对其进行评估。

我替换了最后一行

pytest ${options[@]}

来自

eval pytest ${options[@]}

不确定,但我认为您的问题来自于将两个参数定义为一个参数。尝试将所有参数分开:

#!/bin/bash

options=("-v")
options+=("-m" "not dummy")

echo "about to launch pytest ${options[@]}"
pytest "${options[@]}"