加藤祐介ブログ

第66回シェル芸勉強会メモ

記事投稿日: 2023年10月3日(火)

最終更新日: 2024年3月30日(土)

目次

はじめに

2023年9月30日に開催された第66回シェル芸勉強会にオンラインで参加させていただきました。 そのときの記録をメモとして記事にしておこうと思います。 あと、解けそうな問題はChatGPT(GPT-4)にも解いていただこうと思います。

問1 : 0123456789

問題内容

数字を使わずに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の回答がスマートで勉強になりました。

ChatGPTの回答

echo abcdefghij | tr a-j $(echo a | tr a ':')

出力結果

::::::::::

私の感想

10回くらいやり取りをして最終的にこの回答になりました。 数字を使用できないという制約が難しかったのかもしれません。 また、ChatGPTは実行できない状態のワンライナーも当たり前のように提供してくるので気をつけないといけませんね。

問2 : リダイレクト

問題内容

"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を使いました。長いですがとりあえずはできたっぽいので良しとします。

ChatGPTの回答

ls 存在しないファイル 2>file

私の感想

問題を理解してもらえませんでした。ChatGPTに問題を出すこと自体が難問です。

問3 : 終了ステータス

問題内容

1,2,3,4文字それぞれで終了ステータス1を出します(禁止事項は配信を参照)。

私の回答

!
%1
1<1

私の感想

4文字の場合が思いつきませんでした(そもそも1,2,3文字の場合も適当に打っていただけですが)。 ChatGPTに聞いてみてもちゃんとした回答は返ってきませんでした。 難しいですね。精進します。

問4 : trueの終了ステータス

問題内容

何とかしてtrueの終了ステータスを0以外にします。

私の回答

解けませんでした...

私の感想

このあたりの問題から何をすればいいのかも分からなくなってきます。 配信を視聴しながら「そんなこともできるんだなぁ~」と感心するばかりです。 シェル芸勉強会はやっぱりハードですね。勉強になります(楽しいです)。

問5 : 大きなファイル記述子

問題内容

どこかのプロセスにおいて、大きい番号のファイル記述子を作って'/proc/プロセス番号/fd'で存在を確認します。

私の回答

解けませんでした...

私の感想

「そもそもファイル記述子って何だっけ?」というところから調査していました。 シェル芸勉強会の問題に挑戦するたびに「もっと勉強しなきゃなぁ~」という気持ちが強くなります。 まずはulimitコマンドと仲良くなるところから。$$/$$も積極的に使っていきたいです。

問6 : 10以上のファイル記述子を使い切る

問題内容

bashのプロセスで10以上のファイル記述子を使い切ります(開きっぱなしの状態にする)。

私の回答

解けませんでした...

私の感想

Misskeyの皆さんの回答を「なるほどなぁ~」という感じで眺めていました。 ちょうどよく頭も疲れてきたのでよく眠れそうです(3時間経過~)。 1問一問がハードなので6問もあると体力的にも精神的にも疲れます。 皆さん、ここまでお疲れ様でした。

おわりに

第66回シェル芸勉強会についてメモを書きました。 まだまだ勉強することが山ほどあるということが分かる素晴らしい勉強会でした。 私も10年後くらいにはシェル芸の本が書けるくらいの実力を身につけたいと思っております。 今回もとても勉強になりました。次回もよろしくお願いいたします。 あと途中からChatGPTに解いてもらうことを諦めていましたが、次回はまた挑戦したいと思います。

お知らせ

加藤祐介ブログの著作物はCC BY-NC-ND 4.0で公開されています。
加藤祐介ブログのソフトウェアはMITライセンスで公開されています。
© 2023 YusukeKato All Rights Reserved.