bash 스크립트를 통해 docker가 로그인되었는지 확인

bash 스크립트를 통해 docker가 로그인되었는지 확인

이 간단한 스크립트를 사용하여 사용자가 Docker 레지스트리에 로그인했는지 확인하려고 합니다. 사용자가 로그인되어 있으면 출력은 이고 Login Succeeded, 로그인하지 않으면 입력하라는 메시지가 표시됩니다 Username.

#!/bin/bash

if [ $(docker login registry.example.com | grep -E 'Login Succeeded') -z ] 
  then
    echo 'failed'
  else
    echo "ok"
fi

그러나 나는 항상 명령의 출력을 얻기 때문에 이것은 실패합니다 docker login. 내가 뭘 잘못했나요?

답변1

대부분의 명령줄 도구와 마찬가지로 성공 시 docker login종료 코드가 반환되고 0실패 시 0이 아닌 종료 코드가 반환됩니다. if다음과 같은 조건에서 직접 확인해 보면 충분합니다.

if docker login registry.example.com > /dev/null 2>&1 

이는 로그인이 성공할 때 조건이 true라고 주장 if하고 stdout 및 stderr을 로 리디렉션하여 억제합니다 /dev/null.

또는 주장하는 경우 플래그를 grep사용하여 일반적인 일치 출력을 억제할 수 있지만 -q종료 코드를 다시 셸로 설정하면 됩니다.

if docker login registry.example.com 2>/dev/null | grep -q "Login Succeeded"

쉘은 연산자가 피연산자 값을 제공할 것으로 기대하지만 피연산자 값을 볼 수 없으며 명령 대체의 결과는 값이 무엇이든 관계없이 항상 구문 오류를 발생시키기 때문에 조건문 if은 결코 성공하지 않습니다.[ $(..) -z ]-z$(..)

관련 정보