Ansible Script模块在Stdout中添加了领先的Newline字符,可能是在使用Sudo时.为什么



我的脚本如下:

#!/bin/bash
if lscpu | grep 'CPU max MHz' >/dev/null 2>&1; then
        cpu_speed=$(lscpu | grep 'CPU max MHz' | cut -d':' -f2 | awk '{print $1}')
else
        cpu_speed=$(lscpu | grep 'CPU MHz' | cut -d':' -f2 | awk '{print $1}')
fi
echo -ne "${cpu_speed}"

它在输出中添加newline如下:

"stdout": "rn4000.0000",

即使我的脚本文件为空,它仍然在stdout中添加newline如下:

"stdout": "rn"

我的模块如下:

- name: Get Processor Speed
  script: files/get_cpu_speed.sh
  register: cpu_speed_output
  become: yes

所以,正如您所看到的那样。

我试图在线查找任何参考,如果引导newline在Ansible脚本命令中很常见,但是没有。

那么,在我的情况下,什么可能导致领先行?

调试输出如下:

ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=testuser -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/c4ee167dc2 -tt myserver1 '/bin/sh -c '"'"'sudo -H -S  -p "[sudo via ansible, key=epollvusfsfrfsfsfsfmrxdcida] password: " -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-epollvusfsfrfsfsfsfmrxdcida;  /home/testuser/.ansible/tmp/ansible-tmp-1557164925.73-152013190475693/get_cpu_speed.sh'"'"'"'"'"'"'"'"' && sleep 0'"'"''

我无法再现这种行为。如果我完全按照介绍的方式运行您的代码,则不会看到任何领先的Newline。无论如何,都有一个简单的解决方法。而不是指:

cpu_speed_output.stdout

您可以参考:

cpu_speed_output.stdout.strip()

strip()方法将剥离任何领先或落后的空间。

最新更新