我正在尝试创建一个salt执行模块,但我在模块中正确使用cmd.run
时遇到了问题。
如果我跑(使用无主的奴才):
salt-call cmd.run "cat hey.txt | grep 'hey there'"
我明白了:
[INFO ] Executing command 'cat hey.txt | grep 'hey there'' in directory '/root'
local:
hey there
这就是我所期望的,因为它在文件上使用了cat并且对应了相应的行。但是,当我在执行模块中将其作为函数实现时:
def foo():
return __salt__['cmd.run']("cat hey.txt | grep 'hey there'")
我在同步模块后调用它:
salt-call example.foo
它返回(第二个错误只是打印hey.txt的内容):
[INFO ] Executing command 'cat hey.txt | grep 'hey there'' in directory '/root'
[ERROR ] Command 'cat hey.txt | grep 'hey there'' failed with return code: 1
[ERROR ] output: hey there
stranger
I like your
boots
cat: '|': No such file or directory
cat: grep: No such file or directory
cat: 'hey there': No such file or directory
local:
hey there
stranger
I like your
boots
cat: '|': No such file or directory
cat: grep: No such file or directory
cat: 'hey there': No such file or directory
因此似乎由于某种原因它没有将grep识别为命令,并且只是试图在命令行上捕获所有内容,但是INFO说命令运行完全一样,就像我直接执行它一样通过调用cmd.run,所以我很困惑为什么会发生这种情况。
答案 0 :(得分:0)
原因之所以这是因为python_shell允许你使用管道等shell功能,对于模块中的cmd.run默认为False。只需将python_shell = True传递给模块中的cmd.run调用即可解决问题!