ansible shell转义单引号和双引号

ansible shell转义单引号和双引号,shell,module,escaping,ansible,quotes,Shell,Module,Escaping,Ansible,Quotes,我正在尝试执行此命令: ps -eo pid,args --cols=10000 | awk '/\/opt\/logstash\/logstash-1.5.3\// && $1 != PROCINFO["pid"] { print $1 }' 带ansible-m外壳模块(非工作示例): 其中一种方法是将其放入一个文件中,但仍然可以作为命令运行-有什么想法吗?Bash转义规则可以: ansible localhost -m shell -a "ps -eo pid,args

我正在尝试执行此命令:

ps -eo pid,args --cols=10000 | awk '/\/opt\/logstash\/logstash-1.5.3\// && $1 != PROCINFO["pid"] { print $1 }'
带ansible-m外壳模块(非工作示例):


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

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\// && $1 != PROCINFO["pid"] { print $1 }'
对应的应答呼叫:

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

我不得不承认我对grep | grep-v grep很反感。grep-Ec“/[o]pt..”将消除grep-v和wc-c的需要。
x='/\/opt\/logstash\/logstash-1.5.3\// && $1 != PROCINFO["pid"] { print $1 }'; \
  ansible all -m shell -a "ps -eo pid,args --cols=10000 | awk '$x'"