〜2016年3月中旬〜
bashで書いたズンドコキヨシなんだけど、
% bash -c 'a=(ズン ドコ); until [[ $s =~ (ズン ){4}ドコ ]]; do s+="${a[RANDOM%2]} "; done; echo $sキ・ヨ・シ!'
これってzshでは動かない。理由は2つあって、1つは配列は0からじゃなく1から数えること。
もう1つは$sキ・ヨ・シが1つ識別子になってしまうこと。
後者は${s}にすればどっちでもokだが、前者は1個ずれるだけに面倒。
bashでもzshでも動くようにするにはどうすればいいのか。
ZSH_VERSIONを見てsetopt KSH_ARRAYSなんてことするんじゃ無粋だし。
と思ったがだったらもう1個追加しておけばいいのか。
% bash -c 'a=(ズン ドコ ズン); until [[ $s =~ (ズン ){4}ドコ ]]; do s+="${a[RANDOM%2+1]} "; done; echo ${s}キ・ヨ・シ!' ズン ズン ドコ ズン ズン ズン ズン ズン ズン ズン ズン ドコ キ・ヨ・シ! % zsh -c 'a=(ズン ドコ ズン); until [[ $s =~ (ズン ){4}ドコ ]]; do s+="${a[RANDOM%2+1]} "; done; echo ${s}キ・ヨ・シ!' ドコ ドコ ドコ ズン ズン ドコ ズン ドコ ズン ズン ズン ズン ズン ズン ズン ズン ドコ キ・ヨ・シ!
他に方法はないかとman shufしてたらまさにぴったりの機能が。
-rで無限に生成できる。-nで個数も指定できる。
% shuf -n10 -re ズン ドコ ズン ドコ ズン ドコ ドコ ズン ドコ ズン ズン ズン
ここまでできれば後はsedで判断するだけ。
% shuf -re ズン ドコ | sed -r '1h;1!H;g;y/\n/ /;/(ズン ){4}ドコ/{s//& キ・ヨ・シ!/;q};d' ドコ ズン ドコ ドコ ズン ドコ ズン ズン ズン ズン ドコ キ・ヨ・シ!
Hだと追加なので先頭に改行が入ってしまう。そのため1行目だけhにしている。
ここをもうちょっとなんとかできれば。
3/23で終了らしい。メールが来てた。他にもいろいろと。
On March 23rd, the following Channels and their Recipes will be removed from IFTTT: App.net, BuzzFeed, Campfire, Diigo, Etsy, ffffound, Last.fm, Readability, Yahoo Fantasy Sports, and Yammer.
PocketでアーカイブしたタイミングでDiigoに入れてたが、まあ、なくてもいいか。
なんか文字化けだらけでどうしようかと思ってたし。
bやtでLABELを省略すると次にサイクルに飛ぶのはman sedやinfo sedにも書いてあるので、
GNU sedの仕様であることは間違いない。
`b LABEL' Unconditionally branch to LABEL. The LABEL may be omitted, in which case the next cycle is started. `t LABEL' Branch to LABEL only if there has been a successful `s'ubstitution since the last input line was read or conditional branch was taken. The LABEL may be omitted, in which case the next cycle is started.
aというラベル名だと当然ながらtはそこには飛ばない。
% echo | sed ':a;s/^.\{,3\}$/&foo/;t' foo
でも名前を省略したラベルを設定するとなぜかそこに飛ぶ。
% echo | sed ':;s/^.\{,3\}$/&foo/;t' foofoo
2回通っている。
まあ、バグかもしれないが便利なので anagolではこれが多用されている。
Docker 1.10以上なら~/.docker/config.jsonに
"detachKeys": "ctrl-_,_"
を追加すれば、Ctrl-Pを2回押さなくてもいいようになる。
Detachはしないので適当に使わなそうなキーを割り当てた。
psFormatはあったが、imagesFormatがなくて困っていたら、いつのまにか対応していた。
ECRのリポジトリが長くて見辛いのなんのって。
というわけでこんなのを~/.docker/config.jsonに追加した。
"imagesFormat": "table {{printf \"%.20s\" .Repository}}\t{{.Tag}}\t{{.ID}}\t{{printf \"%.19s\" .CreatedAt}}\t{{.Size}}"
3週間遅れにはなるが無料でマガジンが読める。もうこれで十分だ。
はじめの一歩と七つの大罪が読めないが、
まあこの2つは元々あまり読んでなかったので問題ない。
ECRで同じタグ名でpushすると古いイメージはタグなしで残る。
これ最初気づかずにどんどん作ってたら100個ぐらいたまってた。
まあ見分けるのは簡単なので手動でもなんとかなったというか、
最初は削除ボタンがなかったのでどうにもならなかった記憶が。
というわけでawscliで消す。
% aws --region us-east-1 ecr list-images --repository-name repository | \ jq -r '.imageIds[]|select(.imageTag|not).imageDigest' | \ sed 's/^/imageDigest=/' | \ xargs -r aws --region us-east-1 ecr batch-delete-image --repository-name repository --image-ids
imageTagがついてないものを抜き出してbatch-delete-imageが受け付ける形式に変換する。
実はこのままじゃ不完全。
100個ぐらいまでならこれでいいが、list-imagesは最大100個までしか返さないので、
paginationしないといけない。
実はProblem 37がまだ解けてないというすごい単純な理由だったりする。
長くなったわりに終わないという情けない状態が続いて放置している。
先日のECRの不要なイメージを削除するシェル芸はsedが出てきてあれだが、
jq -r '.imageIds[]|select(.imageTag|not).imageDigest' | \ sed 's/^/imageDigest=/' | \
を
jq -r '"imageDigest="+(.imageIds[]|select(.imageTag|not).imageDigest)'
とすればいいのであった。()が必要なんだな。