記事投稿日: 2023年10月3日(火)
最終更新日: 2024年3月30日(土)
2023年9月30日に開催された第66回シェル芸勉強会にオンラインで参加させていただきました。 そのときの記録をメモとして記事にしておこうと思います。 あと、解けそうな問題はChatGPT(GPT-4)にも解いていただこうと思います。
数字を使わずに0123456789を出力します。
cat<<EOF>>a.cpp
#include <bits/stdc++.h>
int main() {
int a[]={'a','b','c','d','e','f','g','h','i','j'};
for(char b: a) printf("%d",b-'a');
}
EOF
g++ a.cpp
./a.out
bashのワンライナーではありませんが、とりあえず想定の出力は得られました。 他に何も思いつかなかったのでまだまだ力不足という感じです。勉強します。 配信で紹介されていたseq infの回答がスマートで勉強になりました。
echo abcdefghij | tr a-j $(echo a | tr a ':')
::::::::::
10回くらいやり取りをして最終的にこの回答になりました。 数字を使用できないという制約が難しかったのかもしれません。 また、ChatGPTは実行できない状態のワンライナーも当たり前のように提供してくるので気をつけないといけませんね。
"ls 存在しないファイル 3>file 2>?"の?に文字列を入れてfileにlsのエラー出力を書き込みます。
ls 存在しないファイル 3>file 2>&$(seq inf|head|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|tac|sed '$d'|sed '$d')
さっそく問1で学んだことを使ってみました。1-10を出力してからsed '$d'で最終行を削除していきます。 欲しい数字は3なので途中でtacを使いました。長いですがとりあえずはできたっぽいので良しとします。
ls 存在しないファイル 2>file
問題を理解してもらえませんでした。ChatGPTに問題を出すこと自体が難問です。
1,2,3,4文字それぞれで終了ステータス1を出します(禁止事項は配信を参照)。
!
%1
1<1
4文字の場合が思いつきませんでした(そもそも1,2,3文字の場合も適当に打っていただけですが)。 ChatGPTに聞いてみてもちゃんとした回答は返ってきませんでした。 難しいですね。精進します。
何とかしてtrueの終了ステータスを0以外にします。
解けませんでした...
このあたりの問題から何をすればいいのかも分からなくなってきます。 配信を視聴しながら「そんなこともできるんだなぁ~」と感心するばかりです。 シェル芸勉強会はやっぱりハードですね。勉強になります(楽しいです)。
どこかのプロセスにおいて、大きい番号のファイル記述子を作って'/proc/プロセス番号/fd'で存在を確認します。
解けませんでした...
「そもそもファイル記述子って何だっけ?」というところから調査していました。 シェル芸勉強会の問題に挑戦するたびに「もっと勉強しなきゃなぁ~」という気持ちが強くなります。 まずはulimitコマンドと仲良くなるところから。$$/$$も積極的に使っていきたいです。
bashのプロセスで10以上のファイル記述子を使い切ります(開きっぱなしの状態にする)。
解けませんでした...
Misskeyの皆さんの回答を「なるほどなぁ~」という感じで眺めていました。 ちょうどよく頭も疲れてきたのでよく眠れそうです(3時間経過~)。 1問一問がハードなので6問もあると体力的にも精神的にも疲れます。 皆さん、ここまでお疲れ様でした。
第66回シェル芸勉強会についてメモを書きました。 まだまだ勉強することが山ほどあるということが分かる素晴らしい勉強会でした。 私も10年後くらいにはシェル芸の本が書けるくらいの実力を身につけたいと思っております。 今回もとても勉強になりました。次回もよろしくお願いいたします。 あと途中からChatGPTに解いてもらうことを諦めていましたが、次回はまた挑戦したいと思います。
各シリーズの記事を下記にまとめてあります。