【发布时间】:2016-06-04 13:50:13
【问题描述】:
我在使用 bash 脚本时遇到问题。我正在尝试通过 ssh 将文件发送到我的树莓派的过程自动化。我想提示输入文件/目录的路径,然后将其复制到我的 pi 上的 /home/pi/push 目录。然后我想问是否还有其他文件要发送,如果是,则再次循环,否则退出程序。出于明显的安全原因,我将 IP 地址归零。
done=0
while [ $done -lt 1 ]
do
read -r -p "Path to file: " path
spawn scp -r $path pi@000.00.000.00:/home/pi/push
expect "assword:"
send "password\r"
interact
read -r -p "Send another? [y/N] " response
if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
then
$done=1
else
echo "Ending file transfer."
fi
done
如果您对实现此目标的更好方法有建议,那也太好了!
【问题讨论】:
-
这里的
spawn让我担心——那是expect关键字,而不是shell 关键字。您不能像在这里尝试的那样混合语言——它们是两种截然不同的解释器,具有两种截然不同的语法。 -
好点@CharlesDuffy。看看设置public key authentication to your Pi以避免密码输入。
-
立即失败的原因是脚本是用
sh而不是bash运行的,顺便说一下。 -
感谢@CharlesDuffy 的提醒。我不知道
expect完全是另一回事。我会做出适当的改变!
标签: bash if-statement ssh while-loop syntax-error