SFTPサーバーにEXPECTとPUTを使用するシェルスクリプト

SFTPサーバーにEXPECTとPUTを使用するシェルスクリプト

シェルスクリプトを作成し、SFTPサーバーにバックアップファイルを送信しようとしています。

remotepath=/backup/
expect -c "
spawn sftp [email protected]
expect "password:"
send "password123\r"
expect "sftp>"
send "put /back_up/bkp_2022.tar.gz $remotepath\r"
expect "sftp>"
send "bye\r"
"

これはファイルを転送せずに取得した出力です。単に「?send put」と「?send byer?」が生成されます。

-rw-r-----. 1 admin admin 1267 Aug 17 11:14 script.sh
-rw-r-----. 1 admin admin    0 Aug 17 11:15 ?send put
-rw-r-----. 1 admin admin  167 Aug 17 11:15 ?send byer?

助けてもらえますか?

答え1

内部引用符(")をエスケープするか、ここでドキュメント構文を使用してください。

remotepath=/backup/
expect <<EOF
spawn sftp [email protected]
expect "password:"
send "password123\r"
expect "sftp>"
send "put /back_up/bkp_2022.tar.gz $remotepath\r"
expect "sftp>"
send "bye\r"
EOF

テストしてみませんでしたので参考にしてください

関連情報