水曜日, 4月 30, 2025
ホームニューステックニュースjqコマンドのargでタイムスタンプをvalueにしたら空で返ってきた #AWS - Qiita

jqコマンドのargでタイムスタンプをvalueにしたら空で返ってきた #AWS – Qiita



jqコマンドのargでタイムスタンプをvalueにしたら空で返ってきた #AWS - Qiita

結論

jqの1.6以前では、jqコマンドの–argのvalueに20バイト以上のASCII文字列を渡すと空になるバグがあった(1.7では改善済み)です。

jqコマンドとは

https://jqlang.org/ によると、

jq is like sed for JSON data – you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.

とのことで、要約するとJSON データ用のsedのようなものとのことです。
jqコマンドについては、@takeshinoda@githubさんの記事に詳しく記載されていますので、ぜひご覧ください。

沼った経緯

以前執筆した記事の続きで、CodeBuildでメンテナンスの時刻を返すためにjqを使ってbashを実行するようにしていました。しかし、下記の実行環境だとjq --arg start "$MAINTENANCE_START" --arg end "$MAINTENANCE_END"の部分がうまく変換されず、中身が空になってしまっていました。

<失敗時の環境>
・オペレーティングシステム:Ubuntu
・ランタイム:Standard
・イメージ:aws/codebuild/standard:5.0(6.0/7.0も同様)

反対に以下の環境だと、jqが期待通りの値に変換され、実行環境が問題なのかと頭を悩ませていました。

<成功時の環境>
・オペレーティングシステム:Amazon Linux
・ランタイム:Standard
・イメージ:x86_674-standard:5.0

調査結果

調査を進めるとOSやイメージが原因ではなく、jqの1.6か1.7かで挙動が変わっていました。
具体的には、失敗していた環境ではjq1.6を使用しており、成功した環境ではjq1.7を使用していました。
コミットを以下で確認したところ、NUL終端を誤認して文字列の長さを0と見なすバグが修正されているようでした。

おわりに

なかなか同じ事象にあっている方は少ないと思われますが、もし同じ事象にあっている方はjq1.7以降を利用することをおすすめします。



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -

Most Popular