셸 에서 ftp 사용 하기

3272 단어
나 는 자주 ftp 로 한 컴퓨터 에서 다른 컴퓨터 로 파일 을 전송 한다.때때로 나 는 명령 행 인 터 랙 션 모드 로 작업 을 수행 하지만, 더 많은 경우 에, 나 는 이 고역 을 하기 위해 스 크 립 트 를 쓰 는 것 을 좋아한다.이 임 무 는 정말 나 로 하여 금 한동안 당 하 게 했 지만, 나 는 결국 그 구 덩이 를 해결 했다.나 는 이 방면 과 관련 된 문 서 를 본 적 이 없어 서, 나 는 이것 을 써 서 너 에 게 참고 하도록 제공 했다.
문제 의 소재
내 가 과정 에서 만난 관건 적 인 문 제 는 ftp 서버 에 비밀 번 호 를 제공 하 는 것 이다. 전형 적 인 ftp 클 라 이언 트 (예 를 들 어 유 닉 스 의, Liux 의, solaris 의, NetBSD 의) 는 모두 /dev/tty 에서 비밀 번 호 를 읽 는 것 이다.
(non - working) 스 크 립 트 예
#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp $HOST <

위의 스 크 립 트 는 작업 이 완료 되 지 않 습 니 다. 전경 에서 실행 되 든 정시 작업 으로 실행 되 든 배경 에서 실행 되 지 않 습 니 다. /dev/tty 이상 한 장치 입 니 다. 모든 프로 세 스 (정확히 말 하면 모든 프로 세 스 그룹) 가 다 릅 니 다. /dev/tty ftp 클 라 이언 트 가 특정한 파일 (예 를 들 어 here document) 에서 비밀 번 호 를 읽 게 해 서 는 안 됩 니 다. 터미널 에서 실 행 될 때,위의 스 크 립 트 는 /dev/tty 에서 비밀 번 호 를 읽 고 터미널 은 스 크 립 트 /dev/tty 를 구성 하기 때문에 스 크 립 트 는 키보드 입력 을 기다 리 고 있 습 니 다.
(working) 스 크 립 트 예
#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <

비결
ftp 클 라 이언 트 가 /dev/tty 에서 비밀 번 호 를 읽 을 필요 가 없습니다. 두 가지 수작 을 부려 야 합 니 다.
  • ftp 클 라 이언 트 의 즉시 로그 인 을 막 기 위해 -n 옵션 을 사용 하여 ftp 클 라 이언 트 를 연결 합 니 다. 그러면 ftp 클 라 이언 트 는 사용자 이름과 비밀 번 호 를 입력 하지 않 습 니 다. 그래서 사용 하지 않 았 습 니 다 /dev/tty
  • ftp 클 라 이언 트 명령 quote 을 사용 하여 사용자 이름과 비밀 번 호 를 보 냅 니 다. 시작 과 끝 에 END_SCRIPT 을 추가 해 야 합 니 다. 명령 이 들 어 갔 음 에 도 불구 하고 추가 해 야 합 니 다.
  • 한층 더 개량 하 다
    위의 스 크 립 트 는 잘 작 동 하 더 라 도 ftp 클 라 이언 트 에서 표준 출력 으로 많은 출력 을 쏟 아 냅 니 다.위의 스 크 립 트 를 실행 하면 바로 많은 난잡 한 내용 을 사용자 에 게 보 여 줍 니 다. 개량 하 는 방법 은 출력 을 다른 곳 으로 보 내 는 것 입 니 다. 멀 수록 좋 습 니 다.
    ftp -n $HOST > /tmp/ftp.worked 2> /tmp/ftp.failed <

    처리 오 류 를 개량 할 수 있 습 니 다. ftp 클 라 이언 트 의 종료 상 태 를 처리 하 는 것 입 니 다.
    ftp -n $HOST > /tmp/ftp.worked 2> /tmp/ftp.failed <
    then 안의 코드 는 일반적으로 실행 되 지 않 습 니 다. 대부분의 경우 ftp 클 라 이언 트 는 상태 로 돌아 갑 니 다 0. 이것 은 쓸모없는 정보 만 줄 수 있 습 니 다. 파일 전송 이 실 패 했 지만 스 크 립 트 에서 도 문 제 를 찾 을 수 없습니다. 다음 방법 은 파일 전송 이 성공 적 인지 확인 할 수 있 습 니 다.
    #!/bin/sh
    ftp -n << END_SCRIPT
    open $1
    user $2 $3
    put $4
    get $4 retrieval.$$
    bye
    END_SCRIPT
    if [ -f retrieval.$$ ]
    then
        echo "FTP of $4 to $1 worked"
        rm -f retrieval.$$
    else
        echo "FTP of $4 did not work"
    fi
    

    불합격 전송 은 파일 을 남 깁 니 다.
    대체 스 크 립 트
    나 는 usenet 글 에서 다른 방법 을 보 았 다.
    #!/bin/sh
    USER=userid
    PASSWD=userpw
    ftp -n f2dev <

    이것 은 여전히 -n 수작 을 사용 하지만, 사용자 이름과 비밀 번 호 를 보 내 는 것 은 모두 ftp 명령 에 있 습 니 다.
    셸 스 크 립 트 에서 ftp 를 사용 하 는 방법

    좋은 웹페이지 즐겨찾기