我的脚本如下:
#!/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}"
它将在输出中添加换行符,如下所示:
"stdout": "\r\n4000.0000",
即使我的脚本文件为空,它仍会在stdout中添加换行符,如下所示:
"stdout": "\r\n"
我的模块如下:
- name: Get Processor Speed
script: files/get_cpu_speed.sh
register: cpu_speed_output
become: yes
因此,如您所见,它确实是sudo。
如果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'"'"''
答案 0 :(得分:2)
我无法重现该行为。如果我完全按照显示的方式运行您的代码,则看不到任何前导换行符。无论如何,都有一个简单的解决方法。而不是参考:
cpu_speed_output.stdout
您可以参考:
cpu_speed_output.stdout.strip()
strip()
方法将删除任何前导或尾随空格。