我有一个Ansible库存文件,该文件的ansible_password值需要由用户输入替换
我在windows.yaml
下方的内容
ansible_user=sa_user@somewindowsdomain.external
ansible_password =
然后我从詹金斯(Jenkins)获得一个userInput,用户在其中输入&32lihdye34jC5W
parameters {
password defaultValue: '', description: 'Please Enter ansible_password ', name: 'sa_pass'
}
sh 'echo ${sa_pass}'
我在下面尝试过
sed -i "s/ansible_password=.*/ansible_password=${sa_pass}/g" $inventory_path/windows.yaml
它不满足我的要求,但却跌倒了
ansible_password=ansible_password32lihdye34jC5W
我期望的是
ansible_password = &32lihdye34jC5W
答案 0 :(得分:0)
一种方法是避免使用s///
。如果您使用的是GNU sed,则可以执行以下操作:
$: a_pass="&32lihdye34jC5W"; echo "foo stuff
ansible_password=ansible_password32lihdye34jC5W
bar stuff" | sed -E "/ansible_password\s*=\s*/ {
e echo \"ansible_password = ${sa_pass}\";
d; }"
foo stuff
ansible_password = &32lihdye34jC5W
bar stuff
GNU sed
的{{1}}被“执行”并运行一个子命令。
需要e
来阻止d
打印sed
命令之外的记录。
另一种方法是在POSIX chracter类中用引号引起来。
e
我认为应该适用于非GNU版本。