Bash:通过SSH在远程服务器上回显时执行的命令

时间:2016-05-22 14:40:28

标签: bash variables ssh echo

修改
我刚刚使用#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

0 个答案:

没有答案