我已经在 .netrc 文件中定义了一个宏,但是当我从 ftp 执行它时,它显示“未找到宏”

我已经在 .netrc 文件中定义了一个宏,但是当我从 ftp 执行它时,它显示“未找到宏”

这是 .netrc 文件和我使用的命令,知道这里出了什么问题吗?

[root@localhost ~]# cat /root/.netrc
machine ftp.nyxdata.com
login anonymous
password empty

macdef download_nyse_index
cd /OpenBook/SymbolMapping
bin
get SymbolMap.xml /tmp/SymbolMap.xml
quit

[root@localhost ~]# ftp
ftp> $ download_nyse_index
'download_nyse_index' macro not found.
ftp> bye
[root@localhost ~]# uname -a
Linux localhost 3.17.8-200.fc20.i686+PAE #1 SMP Thu Jan 8 23:45:44 UTC 2015 i686 i686 i386 GNU/Linux
[root@localhost ~]# which ftp
/bin/ftp
[root@localhost ~]# rpm -qf /bin/ftp
ftp-0.17-65.fc20.i686

答案1

macdef与其他指令( 、 等)一样,指令login仅适用passwordmachine它所在的 -headed 节。据我所知,macdef在第一个machine节之前放置指令没有任何效果,并且无法使用宏在open命令执行之前。

如果您首先打开与该站点的连接,您的宏将起作用:

$ ftp ftp.nyxdata.com
ftp> $download_nyse_index

要编写完整的 FTP 会话脚本,请将输入传递给ftp命令。

ftp ftp.nyxdata.com <<EOF
cd /OpenBook/SymbolMapping
bin
get SymbolMap.xml /tmp/SymbolMap.xml
quit
EOF

如果您正在做这么简单的事情,请使用 wget 或 curl。如果您不希望密码出现在命令行中,可以输入~/.netrc; wget 默认读取它,如果传递该-n选项,curl 会读取它。

wget -O /tmp/SymbolMap.xml ftp://ftp.nyxdata.com/OpenBook/SymbolMapping/SymbolMap.xml

答案2

strace ftp在我的 Fedora 上使用时,它甚至无法读取~/.netrc,除非我在命令行上使用主机名运行它。

另外,它无法识别该宏,直到我在文件末尾明确添加一个空行!所以尝试一下

$ ftp ftp.nyxdata.com
ftp> $download_nyse_index

相关内容