.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他のディレクティブ(など)と同様に、ディレクティブはそれが表示される-headedセクションにのみlogin適用されます。私が知っている限り、最初のセクションの前にディレクティブを置くことは効果がなく、コマンドが実行される前にマクロを使用する方法はありません。passwordmachinemacdefmachineopen

まず、サイトへの接続を開くとマクロが機能します。

$ 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またはカールを使用してください。コマンドラインにパスワードが表示されたくない場合は、パスワードを入力してください~/.netrc。 wgetはデフォルトでパスワードを読み取り、-nそのオプションを渡すとカールはパスワードを読み取ります。

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

答え2

strace ftp~/.netrc私のFedoraで使用すると、ホスト名を使用してコマンドラインから実行しない限り読みません。

また、ファイルの最後に空の行を明示的に追加するまで、マクロを認識しません。だから試してみてください

$ ftp ftp.nyxdata.com
ftp> $download_nyse_index

関連情報