![带有 EXPECT 和 PUT 到 SFTP 服务器的 Shell 脚本](https://linux22.com/image/209517/%E5%B8%A6%E6%9C%89%20EXPECT%20%E5%92%8C%20PUT%20%E5%88%B0%20SFTP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%20Shell%20%E8%84%9A%E6%9C%AC.png)
我正在编写 shell 脚本,并尝试将备份文件发送到 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
请注意,我没有测试