我有一个简单的命令,用grep和perl regex从ps -ef | grep java
输出中提取catalina.home
输出,如下所示。Ansible:使用grep和perl正则表达式的Shell命令
ps -ef |grep java |grep -Po "Dcatalina.home=[^\s]*\s"
而当我执行这个命令时,它只会从输出中提取cataline.home部分,如下所示。
# ps -ef |grep java |grep -Po "Dcatalina.home=[^\s]*\s"
Dcatalina.home=/usr/share/apache-tomcat-7.0.32
但是当我通过Ansible发出同样的命令,它发送给服务器 ps -ef |grep java |grep -Po /\"Dcatalina.home=[^/\\s]*\/\s\"
并没有给出输出。从Ansible
FAILED! => {"changed": true, "cmd": "cd $(ps -ef |grep java |grep -Po \"Dcatalina.home=[^\\s]*\\s\" | awk -F'=' '{print $2}') ; bash bin/version.sh | grep 'Server version:'", "delta": "0:00:00.080606", "end": "2017-08-17 03:57:02.816848", "failed": true, "rc": 1, "start": "2017-08-17 03:57:02.736242", "stderr": "/bin/sh: line 0: cd: [^\\s]*\\s\": No such file or directory\nbash: bin/version.sh: No such file or directory", "stderr_lines": ["/bin/sh: line 0: cd: [^\\s]*\\s\": No such file or directory", "bash: bin/version.sh: No such file or directory"], "stdout": "", "stdout_lines": []}
错误有什么办法,我可以告诉Ansible执行完全按照我给的命令?
在此先感谢。
你使用哪个模块?据我记得,shell模块http://docs.ansible.com/ansible/latest/shell_module.html更好地执行命令。 – ThoFin
@ThoFin我只使用shell模块。我们可以通过下面的例子来说明如何使用shell:cd $(ps -ef | grep java | grep -Po“Dcatalina.home = [^ \ s] * \ s”| awk -F'=''{print $ 2}'); bash bin/version.sh | grep'服务器版本:' register:cnp_tomcat_output ' –
什么是奇怪的正斜杠? – Nullman