Bash:通过SSH在远程服务器上回送时执行的命令
编辑:Bash:通过SSH在远程服务器上回送时执行的命令,bash,variables,ssh,echo,Bash,Variables,Ssh,Echo,编辑: 我只是用echo$(printf'%q'$content')而不是echo-e“$content”解决了这个问题。我不明白为什么我必须这样做才能在远程服务器上打印,但在本地服务器上不需要 我想使用SSH在远程服务器上打印bash变量(包含一些shell命令的多行字符串)的内容 当我在本地服务器上打印它时(第21行:echo“$content”),输出是正确的。 当我在远程打印机上打印它时(第37行:echo-e“$content”),双引号消失,命令被执行(例如$(日期)) 我不明白怎
我只是用
echo$(printf'%q'$content')
而不是echo-e“$content”
解决了这个问题。我不明白为什么我必须这样做才能在远程服务器上打印,但在本地服务器上不需要
我想使用SSH在远程服务器上打印bash变量(包含一些shell命令的多行字符串)的内容 当我在本地服务器上打印它时(第21行:
echo“$content”
),输出是正确的。当我在远程打印机上打印它时(第37行:
echo-e“$content”
),双引号消失,命令被执行(例如$(日期)
)
我不明白怎么了。有人能帮我吗
脚本:
旁注:检查目标环境正在使用的shell
echo-e
是bashism,默认情况下,兼容posix的shell中的echo
是echo-e
为什么要添加{}?这些括号是用来执行的。你可以在manbash
上读到它,你可以在主机名的双引号和$中添加转义字符吗?我刚刚用echo$(printf'%q'$content')
解决了这个问题。我不明白为什么我必须在远程设备上这样做,而不是在本地设备上。旁注:检查目标环境正在使用什么shellecho-e
是bashism,默认情况下,兼容posix的shell中的echo
是echo-e
为什么要添加{}?这些括号是用来执行的。你可以在manbash
上读到它,你可以在主机名的双引号和$中添加转义字符吗?我刚刚用echo$(printf'%q'$content')
解决了这个问题。我不明白为什么我必须在遥控器上这样做,而不是在本地。
#!/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
admin@myServ> ./test.sh
#!/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)
## BEGIN SERV ## (serv05 : serv05.company.org) ##
serv05 : myUser
root
#!/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 : Thu Sep 25 12:59:13 CEST 2014
## END SERV ## (serv05 : serv05.company.org) ##
[...]
admin@myServ>