bashスクリプトを使用してkubernetesがインストールされていることを確認する必要があります。そうでない場合は、セットアッププロセスを開始します。kubectl cluster-info
出力があるかどうかを確認してみるとよいでしょう。失敗したコマンドを確認するには?
if command kubectl cluster-info > /dev/null; then
# sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
# ...
fi
答え1
互換性のあるシェルにsh
存在しないコマンドの終了状態は、必ずしも必要です127
。
コマンドが見つからない場合、終了ステータスはです
127
。コマンド名が見つかりましたが実行可能ユーティリティではない場合は、シャットダウン状態にする必要があります126
。
(源泉)
内蔵内容は大幅に変更されていませんcommand
。
[...] は、次の終了値を返す必要があります。
126
指定されたユーティリティ[...]が見つかりましたが、呼び出すことはできません。
127
コマンドユーティリティでエラーが発生したか、指定された[...]ユーティリティが見つかりません。
(源泉)
あなたの例が修正されました:
command kubectl cluster-info >/dev/null 2>&1
if [ "$?" -eq 127 ]; then …
しかもtype
。
ユーティリティーは、
type
コマンド名として使用される場合、各パラメーターがどのように解釈されるかを表示する必要があります。
(源泉)
POSIX は出力の正確な形式を指定しません。終了ステータスは、エラーと成功を区別するだけです。提供されたコマンドが存在しないことが正常に検出されたかどうかは不明です。
しかし、大きな打撃を受けた状態で疑いの余地はありません:
すべての名前が見つかった場合は戻り状態は 0 で、名前が見つからない場合は 0 ではありません。
いくつかの便利なオプションがあります。
-t
このオプションを使用すると、または(名前がエイリアスの場合はシェル関数、シェル組み込み関数、ディスクファイル、またはシェル予約語のそれぞれ)のいずれかであるtype
単語を印刷します。名前が見つからない場合は、何も印刷されず、失敗ステータスが返されます。alias
function
builtin
file
keyword
type
このオプションを使用すると、
-p
typeは実行するディスクファイルの名前を返し、-t
そうでない場合は何も返しませんfile
。
type -t kubectl
および/またはの出力および終了ステータスを調べてtype -p kubectl
何かを学ぶことができます。kubectl
いいえ呼んでください。
kubectl
それにもかかわらず、命令として使用されたときに実行されるファイルとして解釈されることを事前に発見しても、それが実行されることを意味するものではありません。これ kubectl
あなたはする必要があります。
答え2
既存の回答は私が必要とするものと似ていますが、既存の回答をすべて組み合わせた後は、次のことが機能します。
if type kubectl &> /dev/null; then
source <(kubectl completion bash)
fi
アンパサンドがない場合、出力は端末に表示されます。