问题描述: 使用Bash脚本结合sftp和expect命令来获取多个文件时,可能会遇到无法继续进行的问题。
解决方法:
#!/bin/bash
files=("file1.txt" "file2.txt" "file3.txt")
for file in "${files[@]}"
do
expect -c "
spawn sftp user@host
expect \"password:\"
send \"password\n\"
expect \"sftp>\"
send \"get $file\n\"
expect \"sftp>\"
send \"exit\n\"
interact
"
done
sleep
命令在下一个操作之前添加一些延迟,以确保前一个操作已经完成。#!/bin/bash
files=("file1.txt" "file2.txt" "file3.txt")
for file in "${files[@]}"
do
expect -c "
spawn sftp user@host
expect \"password:\"
send \"password\n\"
expect \"sftp>\"
send \"get $file\n\"
expect \"sftp>\"
send \"exit\n\"
interact
"
sleep 1
done
expect
命令等待特定的输出,以确保前一个操作已经完成。#!/bin/bash
files=("file1.txt" "file2.txt" "file3.txt")
for file in "${files[@]}"
do
expect -c "
spawn sftp user@host
expect \"password:\"
send \"password\n\"
expect \"sftp>\"
send \"get $file\n\"
expect \"sftp>\"
send \"exit\n\"
interact
" | grep "sftp>"
done
这些解决方法可以确保每次获取文件后都会进行一定的延迟或等待,以便正确处理每个文件。