pytest的bash脚本内的引号

时间:2018-10-08 12:16:40

标签: bash shell pytest quotation-marks

我尝试编写一个脚本,该脚本有助于根据用户输入选择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脚本:

  

即将启动pytest -v -m“ not dummy”   ================================================== ================================================== ===========================测试会话开始   ================================================== ================================================== ===========================平台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:插件:   cov-2.5.1

     

================================================ ================================================== ========================= 0.00秒内没有运行任何测试   ================================================== ================================================== =======================错误:找不到文件:虚拟“

当然,运行生成的命令

  

pytest -v -m“非虚拟”

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

提前谢谢

2 个答案:

答案 0 :(得分:5)

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

#!/bin/bash

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

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

答案 1 :(得分:-2)

实际上,找到了解决此问题的方法。显然,最简单的解决方案是将整个命令“重铸”为字符串,并进行评估以评估它。

我替换了最后一行

  

pytest $ {options [@]}

作者

  

评估pytest $ {options [@]}