Description / これは何?

Makes feces (FUN, 糞 as Japanese) that overlap as many as you receive from /dev/stdin.
標準入力から受け取った数だけ重なった、糞を作ります。

$ echo 3 | makefun
  (
 (_)
(___)

$ echo 5 | makefun
    (
   (_)
  (___)
 (_____)
(_______)

Usage / 使い方

Install / インストール

$ (cd /tmp; wget https://gist.githubusercontent.com/kemasoft-oss/edb86fde900c0cb4c572ce39a2f0e50e/raw/a1b4f91afebd60ca4bc3a422e8457937802632
5e/makefun; chmod a+x makefun; sudo install makefun /usr/local/bin/)

  or

$ wget -O /tmp/makefun https://bit.ly/3zFmITB; chmod a+x /tmp/makefun; sudo install /tmp/makefun /usr/local/bin/

  -- snip --

2021-09-02 10:35:34 (11.4 MB/s) - ‘makefun’ saved [183/183]

Draw / 描画する

$ echo 3 | makefun
  (
 (_)
(___)

Uninstall / アンインストール

$ sudo rm /usr/local/bin/makefun; hash -r

$ makefun
makefun: command not found

server化

start server / サーバ起動

socat tcp-l:19876,reuseaddr,fork exec:/usr/local/bin/makefun &

test / 動作確認

$ echo 5 | socat - tcp:localhost:19876
    (
   (_)
  (___)
 (_____)
(_______)

Call from another host / 他のホストから呼び出し

C:\>
echo 3 | wsl socat - tcp:172.27.195.99:19876
  (
 (_)
(___)

stop server / サーバ停止

kill %$(jobs | awk -F'[][]' '/19876/{print $2}') 2>/dev/null

Implimentation / 解説

Goal / 肝となる部分

$ echo 5 | perl -nE 'for(; $_>0; $_--){say $s."_" x ($_*2-1); $s.=" "}' | sed 's/_/(/;s/_$/)/' | tac
    (
   (_)
  (___)
 (_____)
(_______)

n から 1 まで、2n-1 個の下線を引く

Underline (2 * n - 1) from 'n' to 1

$ echo 5 | perl -nE 'for(; $_>0; $_--){say "_" x ($_*2-1)}'
_________
_______
_____
___
_

N行目の先頭に N-1 個のスペースを入れる

Insert (N - 1) spaces at the beginning of the Nth line

$ echo 5 | perl -nE 'for(; $_>0; $_--){say $s."_" x ($_*2-1); $s.=" "}'
_________
 _______
  _____
   ___
    _

前後を括弧に置き換える

Replace before and after with parentheses

$ echo 5 | perl -nE 'for(; $_>0; $_--){say $s."_" x ($_*2-1); $s.=" "}' | sed 's/_/(/;s/_$/)/'
(_______)
 (_____)
  (___)
   (_)
    (

ひっくり返す

Turn over

$ echo 5 | perl -nE 'for(; $_>0; $_--){say $s."_" x ($_*2-1); $s.=" "}' | sed 's/_/(/;s/_$/)/' | tac
    (
   (_)
  (___)
 (_____)
(_______)

申し訳程度のサニタイジングやパラメータ制限を入れておく

Put in minimum sanitizing and parameter restrictions

#!/bin/sh

tr -dc 0-9           |
perl -nE '
  exit if ($_ > 100);
  for($i=$_; $i>0; $i--){
    say $s."_" x ($i*2-1);
    $s.=" ";
  }'                 |
sed 's/_/(/;s/_$/)/' |
tac

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-02 (木) 11:44:16