这是 .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
仅适用password
于machine
它所在的 -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