ansible shell 转义单引号和双引号

ansible shell escape single and double quotes

我正在尝试执行此命令:

ps -eo pid,args --cols=10000 | awk '/\/opt\/logstash\/logstash-1.5.3\// &&  != PROCINFO["pid"] { print  }'

whith ansible -m shell 模块(not 工作示例):

ansible -m shell -a '"'ps -eo pid,args --cols=10000 | awk '/\/opt\/logstash\/logstash-1.5.3\// &&  != PROCINFO[\'pid\'] { print  }' '"' all

其中一种方法是将其放入文件中,但 运行 作为命令仍然很好 - 有什么想法吗?

Bash 转义规则可以:

ansible localhost -m shell -a "ps -eo pid,args --cols=10000 | awk '/\/opt\/logstash\/logstash-1.5.3\// && $1 != PROCINFO[\"pid\"] { print $1 }'"

我的有效替代版本:

ansible -m command -a "ps a |grep -E '/opt/logstash/logstash-1.5.3/vendor/jruby' " all --sudo

检查进程是否 运行:

ansible -m shell -a "ps aux |grep -E '/opt/logstash/logstash-1.5.3/vendor/jruby'|grep -v -e grep |wc" all 

一个简单的方法(即不需要重写命令或引入一堆转义)是使用临时变量。

你原来的命令:

ps -eo pid,args --cols=10000 \
  | awk '/\/opt\/logstash\/logstash-1.5.3\// &&  != PROCINFO["pid"] { print  }'

对应ansible调用:

x='/\/opt\/logstash\/logstash-1.5.3\// &&  != PROCINFO["pid"] { print  }'; \
  ansible all -m shell -a "ps -eo pid,args --cols=10000 | awk '$x'"