Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ASCII art oneliner

Avatar for MSR MSR
October 29, 2016

ASCII art oneliner

アスキーアート(突然の死、slコマンド、端末画面ぐちゃぐちゃ)をワンライナーでやってみた
※完全版

Avatar for MSR

MSR

October 29, 2016
Tweet

More Decks by MSR

Other Decks in Technology

Transcript

  1. ໨࣍ ➤ ࣗݾ঺հ ➤ ࠓ·Ͱͷ൓ল ➤ ΞεΩʔΞʔτͳγΣϧܳ (όφʔܳ) ➤ ಥવͷࢮ

    ➤ slίϚϯυ ➤ λʔϛφϧը໘Λ͙ͪΌ͙ͪΌʹ͢Δ ➤ ·ͱΊ
  2. ࣗݾ঺հ ➤ ϋϯυϧωʔϜ: MSR (@msr386) ➤ C++ϓϩάϥϛϯάɺαʔόʔӡ༻͕ಘҙ ➤ ٻ৬த ➤

    Chromium Contributor (1ճ͚ͩ) ➤ Webϒϥ΢β࡞͍ͬͯ·͢ (http://app.tungsten-start.net/)
  3. ಥવͷࢮ ➤ 2012೥ࠒɺͱ͋Δܝࣔ൘ʹॻ͖ࠐ·Εͨ΋ͷ͕ݩωλͱݴΘΕ͍ͯΔ ➤ ࠷ޙͷғΈจࣈͷΞεΩʔΞʔτ͚͕ͩΑ͘࢖ΘΕ͍ͯΔ ➤ 2013೥ʹTwitterͰվߦίʔυ͕ରԠ͔ͯ͠Βڻҟతʹ֦ࢄ ➤ ओͳಛ௃ ➤

    ൚༻ੑͷߴ͞ ➤ ΞεΩʔΞʔτͷ୯७͞ ➤ ݟͨ໨ͷྗڧ͞ ➤ ʮಥવͷࢮδΣωϨʔλʔʯͱ͍͏໊લͰWebαʔϏεԽɺiOS΍Android޲͚ʹΞϓ ϦԽ͞Ε͍ͯΔ
  4. ಥવͷࢮɹγΣϧεΫϦϓτ൛͕ଘࡏ ➤ γΣϧεΫϦϓτ΋͋Δ (https://fumiyas.github.io/2013/12/25/echo-sd.sh-advent-calendar.html) $ echo -e "crontab -r\n突然の危険シェル芸" |

    echo-sd -s --center
 _人人人人人人人人人人人_
 >   crontab -r   <
 > 突然の危険シェル芸 <
 ‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^‾
 $ 
 $ echo-sd -v 縦書き
 _人人_
 > 縦 <
 > 書 <
 > き <
 ‾Y^Y^‾
 $
  5. ಥવͷࢮɹγΣϧεΫϦϓτ൛͕ଘࡏ ➤ ॎॻ͖ɺ୹࡭ɺετϨεൃੜաఔϞʔυɺπΠʔτػೳͳͲػೳ͕๛෋ $ echo-sd --stress "crontab: no crontab for

    root" あれ?中身消えてる "(historyの結果) 334 sudo crontab -r" "eとr押し間違い!バック アップない!!" 危険シェル芸
 
 crontab: no crontab for root
     ↘
    あれ?中身消えてる
     ⾫
 (historyの結果) 334 sudo crontab -r
     ↘
    eとr押し間違い!バックアップない!!
     ⾫
 _人人人人人人人人_
 > 危険シェル芸 <
 ‾Y^Y^Y^Y^Y^Y^Y^Y^‾ $ echo-sd --tanzaku ":(){ :|:& };:"
 ┏-┷-┓
 ┃ ‥ ┃
 ┃ ⏜ ┃
 ┃ ⏝ ┃
 ┃ ⏞ ┃
 ┃  ┃
 ┃ ‥ ┃
 ┃ | ┃
 ┃ ‥ ┃
 ┃ & ┃
 ┃  ┃
 ┃ ⏟ ┃
 ┃ ; ┃
 ┃ ‥ ┃
 ┗━━┛
  6. ੍࡞աఔ 2. จࣈ਺Λௐ΂Δʹ͸?
 awkͷlength()Λ࢖༻͢Δ
 for (i=0; i<length()+2; i++) { up=up

    "ਓ"; dn=dn "Y^" }
 ※+2͸ࠨӈͷه߸ͱ༨ന 3. printfͰ੔ܗ͢Δ
 printf("ʊ%sʊ\nʼɹ%sɹʻ\nʉ%sʉ\n", up, $0, dn)
  7. ಥવͷϫϯϥΠφʔ୯७൛ $ echo 突然の死 | awk \
 '{for(i=0;i<length()+2;i++) \
 {up=up

    "人"; dn=dn "Y^"} printf( \
 "_%s_\n> %s <\n‾%s‾\n", \
 up, $0, dn)}'
  8. ಥવͷϫϯϥΠφʔ୯७൛ɹ࣮ߦྫ $ echo 突然の死 | awk '{for(i=0;i<length()+2;i++){up=up "人"; dn=dn "Y^"}

    printf("_%s_\n> %s <\n‾%s‾\n", up, $0, dn)}'
 _人人人人人人_
 > 突然の死 <
 ‾Y^Y^Y^Y^Y^Y^‾
 $
 $ echo Hankakuだとずれる | awk '{for(i=0;i<length()+2;i++){up=up "人"; dn=dn "Y^"} printf("_%s_\n> %s <\n‾%s‾\n", up, $0, dn)}' _人人人人人人人人人人人人人人_
 > Hankakuだとずれる <
 ‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^‾
 $
  9. ಥવͷϫϯϥΠφʔվྑ൛ $ echo 突然の死 | awk \
 '{for(i=1;i<=length();i++){ \
 len+=(substr($0,i,1)~/[\x01-\x7E]/)?1:2}

    \
 for(i=0;i<len/2+2;i++){ \
 up=up "人";dn=dn "Y^"} \
 printf("_%s_\n> %s <\n‾%s‾\n", \
 up,$0,dn)}'
  10. ಥવͷϫϯϥΠφʔվྑ൛ɹ࣮ߦྫ $ echo 突然のワンライナーEx | awk '{for(i=1;i<=length();i++){len +=(substr($0,i,1)~/[\x01-\x7E]/)?1:2}for(i=0;i<len/2+2;i++){up=up "人";dn=dn "Y^"}printf("_%s_\n> %s <\n‾%s‾\n",up,$0,dn)}'

    _人人人人人人人人人人人人_
 > 突然のワンライナーEx <
 ‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^‾ $ $ echo Hankakuでもずれは最小限 | awk '{for(i=1;i<=length();i++){len +=(substr($0,i,1)~/[\x01-\x7E]/)?1:2}for(i=0;i<len/2+2;i++){up=up "人";dn=dn "Y^"}printf("_%s_\n> %s <\n‾%s‾\n",up,$0,dn)}' _人人人人人人人人人人人人人人_
 > Hankakuでもずれは最小限 <
 ‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^‾ $
  11. վྑ൛ͷղઆ ➤ awkΛ੔ܗ͢Δͱ͜ͷΑ͏ʹͳΔ {
 for(i = 1; i <= length();

    i++) {
 len += ( substr($0,i,1) ~/[\x01-\x7E]/ ) ? 1 : 2
 }
 for(i = 0; i < len / 2 + 2; i++) {
 up = up "ਓ";
 dn = dn "Y^"
 }
 printf("ʊ%sʊ\nʼɹ%sɹʻ\nʉ%sʉ\n", up, $0, dn)
 }
  12. վྑ൛ͷղઆ (1.)
 for(i = 1; i <= length(); i++) {


    len +=
 (substr($0,i,1)~/[\x01-\x7E]/)
 ? 1 : 2
 } (2.)
 for(i = 0; i < len / 2 + 2; i++) {
 up = up "ਓ";
 dn = dn "Y^"
 } (3.)
 printf("ʊ%sʊ\nʼɹ%sɹʻ\nʉ%sʉ\n", up, $0, dn) 1. จࣈ਺Λऔಘ
 1จࣈͣͭऔΓग़͠ɺจࣈ͕UTF-8Ͱ1όΠτ จࣈͰ͋Δ৔߹͸1ɺͦΕҎ֎͸2ͱ͢Δɻ
 UTF-8ͷ1όΠτจࣈ͸ɺ0x01ʙ0x7eؚ͕· Ε͍ͯΔ͔Ͳ͏͔Ͱ൑ఆ͢Δɻ 2. ্෦ʮਓʯɺԼ෦ʮY^ʯΛจࣈ਺ʹԠͯ͡ ૿΍͢
 ૿΍͢਺͸શ֯ج४Ͱ͋Δ͜ͱʹ஫ҙ 3. printfͰ੔ܗ
  13. ൪֎ฤ ➤ SEGVͰམͪͨɾɾɾ࢓༷? $ awk --version
 GNU Awk 4.1.3, API:

    1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
 <ҎԼུ>
 $ echo ಥવͷSEGV | awk '{print $0~/[\x00-\x7F]/}'
 1
 $ echo ಥવͷSEGV | awk '{print $0~/[\x00-\x80]/}'
 awk: ίϚϯυϥΠϯ:1: க໋తΤϥʔ: ಺෦Τϥʔ: ηάϝϯςʔγϣϯҧ൓
 Aborted (core dumped)
 $
  14. LSͷ͋Δ͋Δ࿩ ➤ lsͱೖΕΑ͏ͱͯ͠
 $ sl -l
 sl: command not found


    $ ➤ lʮ΋͔ͯ͠͠ʯ
 sʮΘͨͨͪ͠ʯ
 ҎԼུ ➤ lsͱؒҧ͑ͯslͬͯೖΕͪΌͬͨʂͱ͍͏͋Δ͋Δ࿩͔Βɺslͱ͍͏δϣʔΫίϚϯ υ͕஀ੜͨ͠
  15. ৚݅ ➤ ݩωλͷΞεΩʔΞʔτΛϕʔεͱ͢Δ
 o 
 o 
 o ____
 --

    |OO|
 _||__| |
 | |
 /-O=O O=O-- ➤ ंྠ͸ճΒͳ͍ ➤ ৠؾ͸ݻఆ͔ͭग़ͬͺͳ͠ ➤ ӈ͔Βࠨ΁ಈ͕͘ɺؿंશମ͸ৗʹදࣔͤ͞Δ ➤ Ctrl+C͸༗ޮ (ΩʔλΠϓڲਖ਼͕໨తͰ͸ͳ͍͔Β)
  16. γΣϧܳखॱ̍ AAΛ1ߦʹ $ echo -e " o \n o \n

    o ____\n -- |OO|\n _||__| |\n | |\n/-O=O O=O--"
 o 
 o 
 o ____
 -- |OO|
 _||__| |
 | |
 /-O=O O=O--
 $
  17. γΣϧܳखॱ̎ ӈ٧Ί͢Δ ؀ڥʹԠͯ͡ tput colsɺBSDܥͳΒ tput coɺBashͳΒecho $COLUMNS Ͱ୺຤ͷ෯͕ औಘͰ͖Δ

    $ echo $COLUMNS 120 awkͷ-vΦϓγϣϯͰγΣϧม਺Λ౉͠ɺεΫϦϓτ಺ͷprintfͰӈ٧Ίͤ͞Δ $ echo -e " o \n o \n o ____\n -- |OO|\n _||__| |\n | |\n/-O=O O=O--" | awk -v col=$COLUMNS '{printf("%" col "s\n", $0)}'
  18. γΣϧܳखॱ̏ ӈ٧Ίͷ෯ΛݮΒ͍͖ͯ͠ɺ׬੒ for ; do ; doneΛ࢖༻͢Δ $ for ((i=$COLUMNS;

    i>=11; i--)); do clear; echo -e " o \n o \n o ____\n -- |OO|\n _||__| |\n | |\n/-O=O O=O--" | awk -v col=$i '{printf("%" col "s\n", $0)}'; sleep 0.06; done
  19. SLίϚϯυ൪֎ฤ(1) lsʹࣅͨΦϓγϣϯ΋ଘࡏ͢Δ ➤ $ sl -a
 HELP! ➤ $ sl

    -F
 ඈΜͩʂ ➤ $ sl -l
 ͪͬ͞ʂ ➤ $ sl -c
 C51ͩʂ(Α͘஌Βͳ͍) ➤ $ sl -aFlc
 શ෦৐ͤʂ
  20. എܠ৭Λม͑ΔANSIΤεέʔϓγʔέϯε ➤ എܠ৭Λม͑ΔΤεέʔϓγʔέϯε(جຊ8৭)
 ESC[ʻ40ʙ47ʼm
 40: ࠇ, 41: ੺, 42: ྘,

    43: ԫ, 44: ੨, 45: Ϛθϯλ, 46: γΞϯ, 47: ന
 ※୺຤ʹΑΓ৭͸ඍົʹҟͳΔ ➤ എܠ৭Λม͑ΔΤεέʔϓγʔέϯε(256৭)
 ESC[48;5;ʻ৭൪߸ʼm
 48: ֦ுഎܠ৭; 5: 256৭ΠϯσοΫεΧϥʔ; ৭൪߸: 0ʙ255Λࢦఆ ➤ ΤεέʔϓγʔέϯεͷϦηοτίʔυ (͜Ε͕ͳ͍ͱ৭͕Ϧηοτ͞Εͳ͍)
 ESC[0m
  21. ➤ echoίϚϯυͰ͸"\e"Λ࢖͏
 
 
 
 ※"\e"Λೝࣝ͠ͳ͍؀ڥ΋͋Δ ➤ printfίϚϯυͰ͸"\033"Λ࢖͏ $ printf

    "\033[45m%s\033[0m\n" Ϛθϯλ ANSIΤεέʔϓγʔέϯε෇͖Ͱදࣔ Ϛθϯλ $ echo -e “\e[46mγΞϯ\e[0m] γΞϯ
  22. λʔϛφϧը໘͙ͪΌ͙ͪΌɹվྑ൛ ➤ echo
 
 
 ➤ printf
 
 
 


    ※ൈ͚Δʹ͸sleep 500Λফ͔͢Ctrl+CͰ $ clear; for color in `od -vAn -tu1 -N $(($COLUMNS*$LINES)) < /dev/urandom` ; do echo -en "\e[48;5;${color}m \e[0m"; done; sleep 500 $ clear; for color in `od -vAn -tu1 -N $(($COLUMNS*$LINES)) < /dev/urandom` ; do printf "\033[48;5;${color}m \033[0m"; done; sleep 500
  23. ղઆ 1. 0ʙ255·Ͱͷཚ਺Λऔಘ
 odͱ/dev/urandomΛ࢖༻͢Δ
 $ od -vAn -tu1 -N 1

    < /dev/urandom
 15 2. ୺຤ͷը໘͍ͬͺ͍ʹͳΔΑ͏ʹɺܻ਺ * ߦ਺ճ͚ͩཚ਺Λऔಘ͢Δ
 $ od -vAn -tu1 -N $(($COLUMNS*$LINES)) < /dev/urandom
 241 178 43 211 3 255 29 178 181 247 234 112 157 18 152 29 3. ΤεέʔϓγʔέϯεͰ৭Λม͑ͤ͞Δ
 $ echo -en “\e[48;5;${color}m \e[0m”
 $ printf “\033[48;5;${color}m \033[0m” 4. 2.ͰٻΊͨ݁ՌΛforͰճͤ͹׬੒