2013-05-24 2 views
2

SFTP로 파일 전송을위한 쉘 스크립트가 이미 작성되었으며 AIX 버전 6.1에서 정상적으로 작동합니다. 나는 SAP 데이터 서비스로 ETL을 개발하고 새로운 쉘 스크립팅을 개발하고있다. 유닛 테스트 중에 대상 폴더 이름이 사용자에 의해 변경된 경우 SFTP에 존재하지 않는 대상 폴더를 제공했지만 명령 cd 후에 실패하지 않고 종료 코드 0을 반환했지만 오류 메시지가 표시됩니다. Couldn canonicalise : 실패. 따라서 ETL 프로세스는 파일이 전송되지 않았 음을 인식하지 못합니다. 스크립트에서 exit 1을 주입하면 ETL 작업이 SFTP 오류를 발견하여 실패했습니다. 이는 예상되는 동작입니다.cd 명령 실패시 SFTP 종료 방법

내 질문은 : 코드 1을 종료하려면 SFTP 명령을 호출하는 기존 쉘 스크립트를 조정할 수 있습니까?

'#!/bin/sh 

.... 원격 디렉토리가 잘못 철자 때

echo cd $TARGET_REMOTE_DIR>>$INPUT_FILE 

echo put $TARGET_LOCAL_DIR$TARGET_FILE_NAME>>$INPUT_FILE 

echo quit>>$INPUT_FILE 

/usr/bin/sftp -b $INPUT_FILE [email protected]$HOSTNAME 

I echo$? 변수를 잘 명령 cd 후, 그것은 0 반환 여기

스크립트에서 발췌 한 것입니다. 내가 아마 그 길이 명령 cd 후 경우 오류 메시지의 존재에 대한 인라인을 확인하고 있습니다 생각하고 1.

뭔가 의사 코드처럼 다음 코드를 종료하지 0 :

error_msg = get_error_msg({cd $TARGET_REMOTE_DIR>>$INPUT_FILE}) 

if length(trim(error_msg)) <> 0 then 
echo “Cannot change directory! Aborting…” 

exit 1 

fi 

모든 의견은 높이 평가됩니다.

건배!

Martin의 도움을 받아이 솔루션을 구현했습니다. $ 잡기?/usr/bin/sftp 명령 바로 다음에 코드를 반환하고 잡힌 오류로 종료하도록 강요하십시오!

/usr/bin/sftp -b $INPUT_FILE [email protected]$HOSTNAME 

if [[ $? -ne 0 ]]; then 
    " SFTP Error while accessing remote target directory! Error message" 
    exit $? 
fi 

감사합니다. 그레이트 포럼!

답변

0

먼저 OpenSSH sftp을 사용하고 있다고 가정합니다.

OpenSSH sftpcd 명령이 실패 할 때 으로 스크립트를 실제로 중단하고 종료합니다.

문제는 아마도 SFTP 스크립트가 아니라 종료 코드를 캡처하는 방식입니다.

세부 정보를 공유하는 경우 종료 코드를 캡처하는 방법에 대해보다 구체적인 답변을 얻을 수 있습니다.

테스트의 경우 echo $? :
여기서 echo $? 명령을 입력 하시겠습니까? SFTP 스크립트 ($INPUT_FILE)로 이동 하시겠습니까? sftp에는 echo 명령이 없습니다. $? 중 하나를 해결할 수 없습니다.

이 같은 쉘 스크립트에 넣어 경우 : 당신이 원하는

echo cd $TARGET_REMOTE_DIR>>$INPUT_FILE 
echo $? 

는하지 않습니다. 이전 echo 명령의 결과를 쿼리하는 것입니다. 실패하지는 않습니다.

+0

답장을 보내 주셔서 감사합니다. 원격 디렉토리의 철자를 바꿀 때 sftp는 실제로 '찾을 수 없음'오류를 반환하지만 오류 코드는 여전히 0입니다. echo $를 삽입 했습니까? 스크립트 내의 다른 위치에서 항상 0입니다. 오류 메시지 만 캡처 할 수 있습니까? 길이가 0이 아니면 오류 코드가 0이 아닌 힘이 있습니까? – user2418733

+0

'/ usr/bin/sftp ...'뒤에'echo $? '를 넣으려고 했습니까? 그게 일할 수있는 유일한 곳이고 실제로 그렇게합니다. –

+0

답장을 보내 주셔서 다시 한 번 감사드립니다. 예, 나는 $ 잡기를 시도 했습니까? 그 직후에 그 라인 바로 뒤에서 fi가 작동했습니다! 또한 코드 및 오류 메시지 자체를 반환합니다! 내 "평판"등급으로 답을 평가할 수 없습니다 ... – user2418733