ループを使用して、リモートホストでいくつかのコマンドをSSHとして実行して実行するスクリプトを作成しようとしています。私が持っている問題の1つは、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
前にエスケープしてください。$
ssh
\