问题描述
我正在尝试生成一个脚本,该脚本将与ansible
一起在ssh
期望/响应块中复制到远程主机。我想避免编写中间文件。
我有两个问题:
- Ansible似乎在
command
中进行了一些处理,弄乱了多行bash
脚本,但我可以使用/bin/bash -c 'my \ multi \ line \ command'
来解决它(实际上是多行) - 在
bash
调用中(见下文),我似乎无法正确地为Heredoc的EOF标记正确
- name: Generate script on the fly
expect:
command: |
/bin/bash -c 'ssh -o PubkeyAuthentication=no -p {{ ansible_ssh_port }} {{ ansible_user }}@{{ ansible_host }} "cat - > {{ tgtdir }}/myscript.sh" <<-'EOF'
#! /bin/env sh
a="/$0"; a=${a%/*}; a=${a#/}; a=${a:-.}; THIS=$(cd "$a"; pwd)
echo "Script dir == ${THIS}"
echo "{{ someansiblevar }}"
EOF
'
responses:
(.*)password: "{{ ansible_ssh_pass }}"
delegate_to: localhost
(请注意,在此示例中,我显然在单引号内使用了单引号,但是其他变体也都失败了。)
我试图以不同的方式对第一个EOF
周围的引号进行转义,但是我总是得到警告:
"stdout_lines": ["/bin/bash: line 10: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')","","[email protected]'s password: "]
myscript.sh
的内容要么没有正确地保留(即所有$...
扩展),要么包含最后的EOF
(因为它不被识别为定界符,而只是在读取到命令块的末尾,因此发出警告。
处理此问题的正确方法是什么?
(请注意,我委托给localhost
是因为我不想依赖目标主机上的python
,这是只有ssh
的最小系统)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)