修改
我刚刚使用#lang s-exp
代替echo $(printf '%q' "$content")
解决了这个问题。我不明白为什么必须这样做才能在远程服务器上打印它,但在本地不需要它。
我想使用SSH在远程服务器上打印bash变量的内容(包含一些shell命令的多行字符串)。
当我在本地服务器上打印它时(第21行:echo -e "$content"
),输出正确
当我在远程打印它时(第37行:echo "$content"
),双引号就会消失并执行命令(例如echo -e "$content"
)。
我不明白什么是错的。有人可以帮帮我吗?
脚本:
$(date)
输出:
#!/bin/bash
serv05=( serv05.company.org myUser )
serv06=( serv06.company.org myUser )
serv07=( serv07.company.org myUser )
serv08=( serv08.company.org myUser )
list_env=( serv05 serv06 serv07 serv08 )
read -r -d '' content << 'TEST'
#!/bin/bash
# USAGE :
# "./change_date.sh 24" : 24/09/2014
# "./change_date.sh 25" : 25/09/2014
# "./change_date.sh" : 24/09/2014
echo "Before : " $(date)
TEST
echo "$content"
echo
echo
for i in "${list_env[@]}"; do
serv="${i}[0]"
user="${i}[1]"
all="${i}[@]"
echo "## BEGIN SERV ## (${i} : ${!serv}) ##"
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=quiet -T ${!user}@${!serv} << EOF
printf '\033[0;32m' # Green text color
echo \$HOSTNAME : $(whoami)
sudo su -
whoami
echo -e "$content"
printf '\033[0m' # Standard text color
EOF
echo "## END SERV ## (${i} : ${!serv}) ##"
echo
done