BASH 스크립트를 통해 명령 출력의 유효성을 검사하는 것은 그리 효율적이지 않습니다.

BASH 스크립트를 통해 명령 출력의 유효성을 검사하는 것은 그리 효율적이지 않습니다.

원격 데이터베이스가 존재하는지 확인하려고 할 때 조건문과 혼합된 동작이 나타납니다.

기술적으로 이 명령문은 작동하지만(데이터베이스가 발견되면 올바르게 보고됨) 실패하면(데이터베이스를 찾을 수 없음) 어떤 이유로 추적할 수 없는 오류가 발생합니다.

REMOTE_EXISTS=$(mysql --login-path=$REMOTE_HOST --batch --skip-column-names -e "SHOW DATABASES LIKE '"$REMOTE_DB"';" | grep "$REMOTE_DB")

if [[ $? != 0 ]]; then
    die "Checking for $REMOTE_DB failed. Please report this error."
elif [[ $REMOTE_EXISTS ]]; then
    vrb "The database '$REMOTE_DB' has been found to exist on '$REMOTE_HOST'. Proceeding."
else
    die "Oops! We couldn't find '$REMOTE_DB' on the '$REMOTE_HOST' server. Are you sure it's there?"
fi

내가 어디서 잘못되었는지 잘 모르겠습니다. 로그인 세부 정보는 저장된 구성을 통해 전달되므로 mysql_config_editor내 조건이나 설정 방법에 근본적으로 문제가 있다고 생각됩니다.

안타깝게도 오류가 모호하고 내 스크립트의 함정에 걸려서 보고서가 약간 모호합니다. 또한 다음도 시도했습니다.

[ "$REMOTE_EXISTS" -eq 0 ]

[[ "$REMOTE_EXISTS" ]]

더 나은 행운은 없습니다.

도와주셔서 감사합니다. 감사합니다!

답변1

나는 노력할 것이다

mysql --login-path=$REMOTE_HOST --batch --skip-column-names -e "SHOW DATABASES LIKE '"$REMOTE_DB"';"  > /tmp/remote_db

if [[ $? != 0 ]]; then
    die "Checking for $REMOTE_DB failed. Please report this error."
elif grep -q "$REMOTE_DB" /tmp/remote_db ; then
    vrb "The database '$REMOTE_DB' has been found to exist on '$REMOTE_HOST'. Proceeding."
else
    die "Oops! We couldn't find '$REMOTE_DB' on the '$REMOTE_HOST' server. Are you sure it's there?"
fi
  • REMOTE_XXvar에 작은따옴표가 필요한지 잘 모르겠습니다 .

관련 정보