sh -cでコマンドを渡すときはシングルクォートを使う
KubernetesのPod内の環境変数が正しく設定されているかを確認しようとして、以下のようにしたところ、何も出力されなかった。
$ kubectl exec -it pod_name -- /bin/sh -c "echo $VAR_NAME"
Podの中に入って確認すると正しく出る。
$ kubectl exec -it pod_name -- /bin/sh # echo $VAR_NAME test
これは、 /bin/sh -c
に渡したコマンドがダブルクォートだったことが原因。 sh -c
を使うと、 -c
以下で渡したコマンドを sh
で実行させることができるが、ダブルクォートにしてしまうと kubectl
を実行しているシェルで変数が解釈されてしまう。 $VAR_NAME
という環境変数はPodの中にはあるがhostでは設定されていないので、単なる echo
を渡していることと同じになり、何も出力されずに終わる。
正しく確認するには、シングルクォートで渡せば良い。シングルクォートで囲われた内容は展開されないため、 $VAR_NAME
がPodに渡る。
$ kubectl exec -it pod_name -- /bin/sh -c 'echo $VAR_NAME' test