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失敗するとゼロ以外の終了コードが返されます。if以下の条件で直接確認しても十分です。

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

これは、ログインが成功したときに条件がtrueであると主張し、ifstdoutとstderrにリダイレクトすることで抑制します/dev/null

あるいは、主張して​​いる場合は、フラグをgrep使用して一般的な一致出力を抑制できますが、-q終了コードを再びシェルに設定するだけです。

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

シェルは演算子がオペランド値を提供すると期待していますが、オペランド値を見ることはできず、コマンド置換の結果は値が何であっても常に構文エラーを生成するため、条件文は決して成功ifしません。[ $(..) -z ]-z$(..)

おすすめ記事