そのため、現在、コマンドの配列をコンソールに送信する必要がある、expect を使用する bash スクリプトがあります。以下に示すように、IFS を使用してこれらを改行で分割し、expect スクリプトを使用してそれらを変数 cmds_eval に入れます。私の希望は、以下に示すように $cmds_eval を使用して、コマンドの束を一度に期待スクリプトに送信することでした。これはうまくいきません。$cmds_eval は、私が考えていたように解釈されていないようです。これを行う適切な方法は何ですか?いずれにせよ、expect スクリプト内で foreach を実行する必要があるとは思いませんが、もしあれば...以下のスクリプトはもちろん簡略化されています...
cmds_eval=""
OLDIFS=$IFS
IFS="\n" read -ra CMDS <<< "$cmds"
for c in "${CMDS[@]}"; do
cmds_eval+="send -- \"$c\\r\"\r\n"
cmds_eval+="expect \"*myprompt*\"\n"
done
IFS=$OLDIFS
expect <<- DONE
spawn my ssh session
expect "*foobar:*"
send -- "foobar\r"
expect "*foobar:*"
$cmds_eval
send -- "foobar\r"
DONE
cmds は次のようになります。
cmds="pwd
mv myfile ..
ls"