Bash에서 변수로 출력을 캡처 할 수 없습니다 then

에 문제가 redis-cli있습니다. redisBASH를 통해 연결 이 거부 되었는지 (서버 다운) 확인하고 싶습니다 .

간단한 테스트

#!/bin/bash
test=$(redis-cli exit) #exit out of the "not connected console"
if [[ -z $test ]] ; then
    echo "I'm empty :("
fi

Could not connect to Redis at 127.0.0.1:6379: Connection refused$ test에 저장 될 것으로 예상 되지만이 텍스트는 대신 콘솔에 출력됩니다.

무슨 일인지 잘 모르겠습니다. 누구든지 아이디어가 있습니까?

(우분투 14.04.1)



답변

명령 대체로 캡처하는 STDOUT (파일 설명자 1)이 아니라 오류 메시지가 STDERR 스트림 (파일 설명자 2)으로 전송되기 때문 $()입니다.

STDOUT 또는 STDERR에서 문자열을 얻는 데 중점을 둡니다.

test="$(redis-cli exit 2>&1)"

이 경우 [ -z "$test" ]오류 메시지가 변수에 저장되므로 테스트 결과 오 탐지가 발생합니다. 대신 당신은 할 수 있습니다 :

#!/bin/bash
test="$(redis-cli exit 2>/dev/null)"
if [[ -z $test ]] ; then
    echo "I'm empty :("
fi

또한 종료 상태가 사소한 경우 원하는 것을 얻을 수 있다고 생각합니다.

if redis-cli exit &>/dev/null; then
    echo 'Succeeded!!'
else
    echo 'Failed!!'
fi


답변