저는 Linux 시스템에 SSH로 연결하여 일련 번호(예: S1234)를 가져온 다음 라이센스 서버(Unix 시스템)에 대한 ftp 세션을 시작하고 해당 일련 번호에 대한 라이센스를 다운로드하는 bash/expect 스크립트를 작성 중입니다. 예 S1234). 아스팔트).
스크립팅 문제를 제거하기 위해 수동으로 프로세스를 시도했습니다.
Linix 상자에 텔넷 ====> 확인
MYSERIAL="$(직렬 포트 명령 인쇄).tar" ====> 확인
echo $MYSERIAL ====> 좋은 출력은 S1234.tar입니다.
ftp xx.xx.xx.xx =====> ftp 라이센스 서버 확인
GET $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 프로그램으로 전달/내보내지지 않으며 쉘 스타일 변수를 지원하는 프로그램이 있는지 모르겠습니다.
일반적인 해결책은 다음을 사용하는 것입니다.여기 문서평가된 변수를 다른 명령과 함께 FTP 프로그램에 전달합니다. 예:
myserial=S1234.tar
ftp -n xx.xx.xx.xx <<-EOF
user theuser thepassword
get "$myserial"
bye
EOF
(참고: 들여쓰기는 탭 문자를 사용하여 합니다. 들여쓰기가 필요하지 않은 경우 -
에서 삭제하세요 EOF
.)
또는 curl
사용하기가 더 쉽습니다 wget
.
curl -o "$myserial" "ftp://theuser:[email protected]/$myserial"
curl -o "$myserial" xx.xx.xx.xx/"$myserial"
wget -nv xx.xx.xx.xx/"$myserial"