我试图追加一个多行文本包含一些单引号(')的文件是目前在不同的机器上,只能通过不同的用户访问。下面是我的代码片段:
element_list=("element1" "element2")
for element in ${element_list[@]}
do
read -r -d '\n' CONTENT << EOM
field1 = on
field2 = '$element'
field3 = '$element-random-text'
EOM
CONFIG_FILE=/tmp/config.txt
sshpass -p vm_password ssh -t vm_user@<vm-ip> "sudo su - other_user -c 'echo \"$CONTENT\" >> $CONFIG_FILE'"
done
虽然脚本成功执行,但field2和field3值中的单引号消失了。附加到文件的输出如下所示:
field1 = on
field2 = element1
field3 = element1-random-text
field1 = on
field2 = element2
field3 = element2-random-text
我也想把那些单引号转储到文件中。预期输出:
field1 = on
field2 = 'element1'
field3 = 'element1-random-text'
field1 = on
field2 = 'element2'
field3 = 'element2-random-text'
任何帮助将不胜感激。
注意:需要从不同的机器上使用other_user(而不是vm_user)执行此命令。
1条答案
按热度按时间f1tvaqid1#
一个更简单的解决方案是在本地执行所有的扩展,然后只在管道的末尾写入结果。
捕获这里的文档,这样你就可以立即
echo
,这显然是浪费内存;我想你真实的的循环身体看起来更复杂。私有变量不要大写;参见Correct Bash and shell script variable capitalization。为了健壮性,我还在
${element_list[@]}
周围添加了双引号;参见When to wrap quotes around a shell variable