如何使用`watch`来使用特定于bash的语法?

时间:2016-05-15 15:39:29

标签: python bash sh watch

我可以在Linux中成功运行此pyrg命令:

python -m unittest discover |& pyrg

> ...
> ----------------------------------------------------------------------
> Ran 3 tests in 0.001s
> 
> OK

但不是这一个:

watch -n 1 --color 'python -m unittest discover |& pyrg'

> Each 1.0s python -m unittest discover |& pyrg
>
> sh: 1: Syntax error: "&" unexpected

另外,我无法找到如何在pyrg的其他表单中使用python -m而不是实际的脚本:

watch -n 1 --color pyrg python -m unittest discover

> Usage: pyrg [options] TEST_SCRIPT.py
>      : python TEST_SCRIPT.py |& pyrg
>
> pyrg: error: no such option: -m

我怎么解决这个问题?

2 个答案:

答案 0 :(得分:1)

为了使用特定于bash的语法,您需要确保使用bash shell运行命令:

watch -n 1 --color 'bash -c "python -m unittest discover |& pyrg"'

实际上,您可以删除引用级别:

watch -n 1 --color --exec bash -c 'python -m unittest discover |& pyrg'

答案 1 :(得分:0)

根据man bash

  

如果|&使用命令的标准错误,除了标准输出外,还通过管道连接到command2的标准输入;它是2>& 1 |。

的简写

所以,这应该有效:

watch -n 1 --color 'python -m unittest discover 2>&1 | pyrg'