手动 FTP 会话中未解析变量

手动 FTP 会话中未解析变量

我正在编写一个 bash/expect 脚本,该脚本通过 ssh 到 linux 机器,获取其序列号(例如 S1234),然后启动到许可证服务器(unix 机器)的 ftp 会话,并尝试下载该序列号的许可证(例如 S1234)。柏油)。

为了消除任何脚本问题,我手动尝试了该过程:

  1. telnet 到 linix 盒子 ====> 好的

  2. MYSERIAL="$(打印串口命令).tar" ====> 好的

  3. echo $MYSERIAL ====> 好的输出是 S1234.tar

  4. ftp xx.xx.xx.xx =====> ftp 许可证服务器 好的

  5. 得到 $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

或者用curlor更简单wget

curl -o "$myserial" "ftp://theuser:[email protected]/$myserial"
curl -o "$myserial" xx.xx.xx.xx/"$myserial"
wget -nv xx.xx.xx.xx/"$myserial"

相关内容