curl: (3) [globbing] error: bad range specification after pos 3

2020-12-12curlgrep


tflintを入れてみようと思いREADMEにしたがいワンライナーで落としてこようと思ったら思わぬところでつまずいた

$ curl -L "$(curl -Ls https://api.github.com/repos/terraform-linters/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip")" -o tflint.zip && unzip tflint.zip && rm tflint.zip
curl: (3) [globbing] error: bad range specification after pos 3

glob…どこかで[]{}使っているか?という感じだったがgrepが悪さをしていた

自分のシェル環境だとデフォルトでgrepの結果に色をつけるようにしていたのでその結果に対してcurlしようとすることでエスケープシーケンスも含まれてしまっていた

$ curl  -Ls https://api.github.com/repos/terraform-linters/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip" > url.txt
$ cat -v url.txt
^[[01;31m^[[Khttps://github.com/terraform-linters/tflint/releases/download/v0.22.0/tflint_linux_amd64.zip^[[m^[[K

もともとURLに[]{}が含まれているパターンではないのでこの場合の対応は--globoffではだめだった

grep --color=noを追加することでcurl対象のURLがプレーンなテキストになるのでcurlできるようになった

エスケープシーケンスはよくやるので気を付けたい