実現したいこと
- kubectl patch cronjob NAME -p '{"spec":{"schedule":"45 20 8 3 *"}}' -n NAMESPACEをコマンドをシェルにて実行してスケジュール時刻を更新したい
- 45 20 8 3の部分についてはshellにて現在時刻を変数として入れたい
- 左からcronjobの実行時間である分 時 日 月の値のこと
前提
上記コマンドにて手動で実行すると更新できることは確認済み
発生している問題・エラーメッセージ
error: unabel to parse "'{¥"spec¥":{¥"schedule¥"... yaml:found unexpected end of stream
ダブルクォーとの前にエスケープ文字の¥が入ってしまい、k8s側としては想定外コマンドとして認識している、ように私は見える
ちなみに直前のecho $resultで出力される文字をコピーして実行すると意図通り実行できることは確認
該当のソースコード
shell
1schedule_time=省略(dateを用いて時刻を取得) 2echo $schedule_time 3# 上記の出力結果はこうなってる 4# 45 20 8 3 * 5 6before_text='kubectl ... "schedule":"' 7after_text='"}}...-n NAMESPACE' 8 9result=$before_text$schedule_time$after_text 10 11echo $result 12# 上記の出力結果は意図通り以下のようになっている 13# kubectl patch cronjob NAME -p '{"spec":{"schedule":"45 20 8 3 *"}}' -n NAMESPACE 14 15echo `$result` 16# これがエラーになるためのこれの解決方法を知りたい 17
教えてほしいこと
-
なぜ文字列として出力した場合、想定通りの文字になるのに、コマンドとして実行しようとするとエスケープ文字(¥)が入ってくるのか?が知りたい
-
かなり力技なソースのため可読性が悪く、別にこの形に拘っていないので、もっと賢いやり方があれば教えてほしい
- 最初scheduleの中の数字のみ変数にして実行しようとしたが、シングルクォート内に変数を入れられず断念
その他
不足事項あればご指摘ください
回答2件
あなたの回答
tips
プレビュー