2012-03-01 4 views
3

나는 함정 사용법에 대한 적절한 이해를 가지고 있지만, 내 인생에서/dev/tcp에서 반환 된 오류를 잡는 방법을 알지 못한다./dev/tcp에서 Bash의 오류를 잡는 방법?

"cat </dev/tcp/$ URL/$ PORT"를 실행하는 경우 "connect : Connection refused"라는 결과가 나오는 서버 인 경우 오류를 잡는 방법을 알 수 없습니다.

이 경우 트랩 사용 방법에 대한 통찰력이있는 사람은 매우 유용합니다.

if [ $? != 0 ]; then 
    echo "error" 
fi 

하고 오류가 발생한 경우 나 작업을 커밋 할 수 있습니다,하지만 내가이 특정 문제를 처리하는 방법을 알고있는 유일한 방법입니다 : 나는 그것을 처리하는 현재의 방법이있다. 그것을하는 옳은 방법은 아닙니다, 저는 압니다 만, 그것이 내가 일할 수있는 유일한 방법입니다.

누군가가 Bash에서이 문제를 해결하는 방법에 대해 통찰력을 갖고 있다면 좋을 것입니다. 아니, 대신 netcat을 사용할 수 없습니다.

답변

0

트랩은 신호를 잡을 수는 있지만 일반적 예외 관리 기능이 아닙니다.

수 있습니다. "cat"명령의 출력을 catch하고 오류에 대한 정보가 들어 있는지 확인하십시오 (특히 cat의 반환 값이 0이 아닌 경우). 그렇지 않으면 쉘의 내부에서는별로 가능하지 않습니다.

3

오류는 고양이가 아닌 Bash에서 직접 발생합니다. 따라서 리디렉션 연산자는 쓸모가 없습니다.

나는 여전히 연결 오류 메시지를 없애는 방법을 찾고 있습니다.

exec 3<>/dev/tcp/${2}/${3} || { 
    echo "PROBLEM" 
    exit 1 
} 

위의 테스트의 수정 된 버전이 될 수있다 :

은 여전히 ​​오류 조건이 평가 될 수

#!/bin/bash 

# args: #1: host, #2: port 

(exec 3<>/dev/tcp/${1}/${2}) &>/dev/null 
if [ $? -ne 0 ] ; then 
    echo "PROBLEM" 
    exit 1 
fi 

은 물론이 버전은 발신자하지만 열 수 없습니다 FD (3)는 것입니다 않습니다 오류 메시지를 무시합니다.

관련 문제