我正在尝试编写一个脚本,该脚本将在循环的帮助下执行 ssh 并在远程主机上运行一些命令。我遇到的问题之一是,当我运行 for 循环时,它输出为 null。
migration_array=($1)
Environment=$2
case "$Environment" in
"Feature")
echo "Running test on Feature"
ssh -tt [email protected] -p 1234 <<EOF
for i in ${migration_array[@]}; do
echo "file: $i"
done
exit
EOF
;;
*)
echo "unknown environment!"
;;
esac
输出
Last login: Thu Feb 13 15:52:43 2020 from 10.0.10.88
jenkins@feature:~$
> do
> echo "file: "
> done
file:
jenkins@ffeature:~$ exit
logout
Connection to 10.0.10.100 closed.
答案1
我通过将斜杠添加到循环变量来使其工作,
echo "file: \$i"
答案2
它不是 null,它是一个空字符串(不是同一件事)。
您遇到的问题是变量正在被此处的文档(<<
)提前扩展。您需要稍后通过ssh
.因此,通过在其前面放置 a$
来转义 ,以便将其传递到。ssh
\