【問題と解答】jus共催 第48回引きこもりもりシェル芸勉強会

Sat Jun 27 16:25:59 JST 2020 (modified: Sat Jun 27 16:25:59 JST 2020)
views: 294, keywords: プログラミング,勉強会,シェル芸,シェル芸勉強会

  このエントリーをはてなブックマークに追加 
  • 問題で使われているデータファイルはGitHubにあります。クローンは以下のようにお願いします。
  • 環境: 解答例はUbuntu Linux 20.04で作成。Macの場合はcoreutilsをインストールすると、GNUのコマンドが使えます。BSD系の人は玄人なので各自対応のこと。

Q1

次のようなシェルスクリプトを作ります。

このシェルスクリプトは普通に実行すると、「linenoの1行目」という意味で1が出力されます。

このlinenoに書いたコマンドを実行して、現在操作しているBashの行番号を出力してみてください。できるひとは外部コマンドなしで実現してみましょう。

解答例

Q2

次のように打つと、BASHで始まる変数名が列挙できます。

この中で、BASH_VERSIONの値が見たいと思いました。echo ${!BASH*}の前後や間にいろいろ足して、BASH_VERSIONの値を表示してください。できれば外部コマンドの利用は避けてください。

解答例

$ eval echo '$'$(a=(${!BASH*});echo ${a[-1]})
5.0.16(1)-release
$ eval echo '$'$(echo ${!BASH*} | sed 's/.* //')
5.0.16(1)-release
$ echo ${!BASH*} | awk '{print "^"$NF}' | grep -f- <(set)
BASH_VERSION='5.0.16(1)-release'

Q3

sleepをみっつ、systemd(あるいはinitなどプロセス番号1のプロセス)の下にぶら下げてください。できるひとは100個ぶらさげてください。

解答例

補足: デスクトップ版だとsystemdの下のsystemdにぶら下がることがあります。

Q4

いま触っている端末上でecho $$して1が出るように細工してください。

解答例

  • 出典:

Q5

3秒に一回、プロンプトに勝手にunkoと入力されて叱られるようにしてください。

解答例

Q6

$SHLVLの数字でseqの役割を果たす一行のシェルスクリプトを書いて、1から順に出力を得てください。シェルレベルが限界を超えるのは気にしなくてもかまいません。

解答例

Q7

つぎのように、sleepを3代ぶらさげてください。シェルスクリプトを使ってもかまいません。手が出ない場合は2代で十分です。

解答例

次のようなシェルスクリプトが考えられます。

Q8

次のように2分木状にプロセスをぶらさげてください。forkbombには気をつけてくださいね。

$ ps --forest
    PID TTY          TIME CMD
 163971 pts/7    00:00:00 bash
 165295 pts/7    00:00:00  \_ bash
 165296 pts/7    00:00:00  |   \_ bash
 165297 pts/7    00:00:00  |       \_ bash
 165299 pts/7    00:00:00  |       |   \_ bash
 165327 pts/7    00:00:00  |       |   |   \_ bash
 165349 pts/7    00:00:00  |       |   |   |   \_ bash
 165355 pts/7    00:00:00  |       |   |   |   |   \_ bash
 165359 pts/7    00:00:00  |       |   |   |   |   |   \_ sleep
 165356 pts/7    00:00:00  |       |   |   |   |   \_ bash
 165350 pts/7    00:00:00  |       |   |   |   \_ bash
 165357 pts/7    00:00:00  |       |   |   |       \_ bash
 165358 pts/7    00:00:00  |       |   |   |       \_ bash
 165328 pts/7    00:00:00  |       |   |   \_ bash
 165329 pts/7    00:00:00  |       |   |       \_ bash
 165333 pts/7    00:00:00  |       |   |       |   \_ bash
 165334 pts/7    00:00:00  |       |   |       |   \_ bash
 165330 pts/7    00:00:00  |       |   |       \_ bash
 165347 pts/7    00:00:00  |       |   |           \_ bash
 165348 pts/7    00:00:00  |       |   |           \_ bash
 165300 pts/7    00:00:00  |       |   \_ bash
 165302 pts/7    00:00:00  |       |       \_ bash
 165310 pts/7    00:00:00  |       |       |   \_ bash
 165316 pts/7    00:00:00  |       |       |   |   \_ bash
 165320 pts/7    00:00:00  |       |       |   |   \_ bash
 165312 pts/7    00:00:00  |       |       |   \_ bash
 165315 pts/7    00:00:00  |       |       |       \_ bash
 165319 pts/7    00:00:00  |       |       |       \_ bash
 165304 pts/7    00:00:00  |       |       \_ bash
 165306 pts/7    00:00:00  |       |           \_ bash
 165331 pts/7    00:00:00  |       |           |   \_ bash
 165332 pts/7    00:00:00  |       |           |   \_ bash
 165308 pts/7    00:00:00  |       |           \_ bash
 165311 pts/7    00:00:00  |       |               \_ bash
 165314 pts/7    00:00:00  |       |               \_ bash
 165298 pts/7    00:00:00  |       \_ bash
 165301 pts/7    00:00:00  |           \_ bash
 165305 pts/7    00:00:00  |           |   \_ bash
 165321 pts/7    00:00:00  |           |   |   \_ bash
 165337 pts/7    00:00:00  |           |   |   |   \_ bash
 165338 pts/7    00:00:00  |           |   |   |   \_ bash
 165323 pts/7    00:00:00  |           |   |   \_ bash
 165335 pts/7    00:00:00  |           |   |       \_ bash
 165336 pts/7    00:00:00  |           |   |       \_ bash
 165307 pts/7    00:00:00  |           |   \_ bash
 165309 pts/7    00:00:00  |           |       \_ bash
 165322 pts/7    00:00:00  |           |       |   \_ bash
 165324 pts/7    00:00:00  |           |       |   \_ bash
 165313 pts/7    00:00:00  |           |       \_ bash
 165317 pts/7    00:00:00  |           |           \_ bash
 165318 pts/7    00:00:00  |           |           \_ bash
 165303 pts/7    00:00:00  |           \_ bash
 165325 pts/7    00:00:00  |               \_ bash
 165339 pts/7    00:00:00  |               |   \_ bash
 165351 pts/7    00:00:00  |               |   |   \_ bash
 165352 pts/7    00:00:00  |               |   |   \_ bash
 165340 pts/7    00:00:00  |               |   \_ bash
 165353 pts/7    00:00:00  |               |       \_ bash
 165354 pts/7    00:00:00  |               |       \_ bash
 165326 pts/7    00:00:00  |               \_ bash
 165341 pts/7    00:00:00  |                   \_ bash
 165345 pts/7    00:00:00  |                   |   \_ bash
 165346 pts/7    00:00:00  |                   |   \_ bash
 165342 pts/7    00:00:00  |                   \_ bash
 165343 pts/7    00:00:00  |                       \_ bash
 165344 pts/7    00:00:00  |                       \_ bash
 165386 pts/7    00:00:00  \_ ps

解答例



prev:【問題のみ】jus共催 第48回引きこもりもりシェル芸勉強会 next:jus共催 第48回シェル芸勉強会リンク集





このサイトではGoogle AdSenseやその他ソーシャルボタンのためにCookieを使用しています。もし同意いただけない場合はブラウザでクッキーを無効にして閲覧をお願いします。This site uses cookies for Google AdSense and some social buttons. If you cannot accept our use of cookies, please disable cookies on your browser.