简体   繁体   中英

Linux Expect SFTP + put file

I just got some help in automating my password input during an SFTP connection by using Expect .

I then tried to issue a put command and things got complicated again. I'm using the following code:

#!/usr/bin/expect
#!/bin/sh

expect -c "
spawn sftp remoteuser@*.*.*.*
expect \"remoteuser@*.*.*.*'s password:\"
send \"passwrd\r\"
interact "

echo "put output/data.xml\r"
echo "quit\r"

My password input and connection to the remote server works just fine but I am struggling to get the put output/data.xml command to display and execute at the SFTP prompt.

My echo "put output/data.xml\r" and echo "quit\r" lines just print as text which is not entirely surprising but I really don't know what else might work.

I understand you need some help, but you should at least try doing some reading. When you say expect -c 'some stuff...' , you are specifying the entire expect script as the parameter to the -c option. The Expect session will not exist afterward.

Also, try to understand what the interact command does instead of blindly applying what someone advises.

Anyway, the solution:

expect  <<'END_EXPECT'
set timeout -1
spawn sftp remoteuser@1.2.3.4
expect "[Pp]assword:"
send "passwrd\r"
expect "whatever the sftp prompt looks like"
send "put output/data.xml\r"
expect "whatever the sftp prompt looks like"
send "quit\r"
expect eof
END_EXPECT

Note that the here-doc delimiter is quoted when you first see it. That way, you will not be subjected to any shell expansions. It's like the entire here-doc is single-quoted.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM