我正在编写一个 bash/expect 脚本,该脚本通过 ssh 到 linux 机器,获取其序列号(例如 S1234),然后启动到许可证服务器(unix 机器)的 ftp 会话,并尝试下载该序列号的许可证(例如 S1234)。柏油)。
为了消除任何脚本问题,我手动尝试了该过程:
telnet 到 linix 盒子 ====> 好的
MYSERIAL="$(打印串口命令).tar" ====> 好的
echo $MYSERIAL ====> 好的输出是 S1234.tar
ftp xx.xx.xx.xx =====> ftp 许可证服务器 好的
得到 $MYSERIAL =====> 不,我得到:
ftp> get $MYSERIAL
local: $MYSERIAL remote: $MYSERIAL
200 PORT command successful. Consider using PASV.
550 Failed to open file.
ftp>
该变量$MYSERIAL
在 ftp 会话中未解析为 S1234.tar。
有人知道为什么会这样吗?
答案1
该变量未传递/导出到 FTP 程序,我不知道是否存在支持 shell 样式变量的程序。
一个常见的解决方案是使用此处文档将评估的变量与其他命令一起传递给 FTP 程序,例如:
myserial=S1234.tar
ftp -n xx.xx.xx.xx <<-EOF
user theuser thepassword
get "$myserial"
bye
EOF
(注:缩进是使用制表符完成的,如果不需要缩进,请删除-
from EOF
)
或者用curl
or更简单wget
:
curl -o "$myserial" "ftp://theuser:[email protected]/$myserial"
curl -o "$myserial" xx.xx.xx.xx/"$myserial"
wget -nv xx.xx.xx.xx/"$myserial"