.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

관련 정보