gawk 5.0.0いんすこ

参考文献

configure, make, make install とは何か  
【 which 】コマンド――実行コマンドのフルパスを表示する  
GNU awk 5.0.0がリリース - 名前空間が実装されたメジャーバージョンアップ版  
https://qiita.com/ryuichi1208/items/fe625fba0afe0ec46789  
Gawk 5.0.0 released!  

実行例

コード表示

[oracle@centos rr]$ gawk --version | head -n 1
GNU Awk 4.0.2
[oracle@centos ff]$ ll
合計 0
[oracle@centos ff]$ curl -LO ftp://ftp.gnu.org/gnu/gawk/gawk-5.0.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 5628k  100 5628k    0     0   222k      0  0:00:25  0:00:25 --:--:--  303k
[oracle@centos ff]$ ll
合計 5632
-rw-r--r--. 1 oracle docker 5763496  6月 23 13:45 gawk-5.0.0.tar.gz
[oracle@centos ff]$ tar -zxvf gawk-5.0.0.tar.gz
[oracle@centos ff]$ ll
合計 5636
drwxr-xr-x. 15 oracle docker    4096  4月 12 18:31 gawk-5.0.0
-rw-r--r--.  1 oracle docker 5763496  6月 23 13:45 gawk-5.0.0.tar.gz
[oracle@centos ff]$ cd gawk-5.0.0/
[oracle@centos gawk-5.0.0]$ pwd
/home/oracle/ff/gawk-5.0.0
[oracle@centos gawk-5.0.0]$ ll | grep conf
-rwxr-xr-x. 1 oracle docker  47840  4月 11 03:29 config.guess
-rwxr-xr-x. 1 oracle docker  18574  4月 11 03:29 config.rpath
-rwxr-xr-x. 1 oracle docker  31589  4月 11 03:29 config.sub
-rw-r--r--. 1 oracle docker  13627  4月 12 18:03 configh.in
-rwxr-xr-x. 1 oracle docker 375070  4月 12 18:03 configure
-rw-r--r--. 1 oracle docker  12818  4月 12 18:02 configure.ac

[oracle@centos gawk-5.0.0]$ ./configure
[oracle@centos gawk-5.0.0]$ make
[oracle@centos gawk-5.0.0]$ ll
合計 9684
-rw-r--r--. 1 oracle docker   94012  4月  5 16:37 ABOUT-NLS
-rw-r--r--. 1 oracle docker     495 12月 15  2017 AUTHORS
-rw-r--r--. 1 oracle docker   35147 12月 15  2017 COPYING
-rw-r--r--. 1 oracle docker     298  4月 12 18:19 ChangeLog
-rw-r--r--. 1 oracle docker  378804  4月  5 16:38 ChangeLog.0
-rw-r--r--. 1 oracle docker   15752 12月 24 05:01 INSTALL
-rw-r--r--. 1 oracle docker   42397  6月 23 13:48 Makefile
-rw-r--r--. 1 oracle docker    5841  4月  5 16:38 Makefile.am
-rw-r--r--. 1 oracle docker   43725  4月 12 18:03 Makefile.in
-rw-r--r--. 1 oracle docker    2039  4月  8 03:53 NEWS
-rw-r--r--. 1 oracle docker   85116 12月 15  2017 NEWS.0
-rw-r--r--. 1 oracle docker   18602  4月  5 16:38 NEWS.1
-rw-r--r--. 1 oracle docker    1980 12月 24 05:01 POSIX.STD
-rw-r--r--. 1 oracle docker    3852  4月 12 17:59 README
drwxr-xr-x. 2 oracle docker    4096  4月 12 18:18 README_d
-rw-r--r--. 1 oracle docker    4705  4月  5 16:38 TODO
-rw-r--r--. 1 oracle docker   42419  4月 12 18:03 aclocal.m4
-rw-r--r--. 1 oracle docker   32676  4月  5 16:38 array.c
-rw-r--r--. 1 oracle docker  137216  6月 23 13:50 array.o
-rw-r--r--. 1 oracle docker   60231  4月 11 04:06 awk.h
-rw-r--r--. 1 oracle docker  261884  4月 12 18:02 awkgram.c
-rw-r--r--. 1 oracle docker  489048  6月 23 13:50 awkgram.o
-rw-r--r--. 1 oracle docker  165324  4月  9 03:49 awkgram.y
drwxr-xr-x. 4 oracle docker    4096  6月 23 13:50 awklib
-rw-r--r--. 1 oracle docker  100458  4月  5 16:38 builtin.c
-rw-r--r--. 1 oracle docker  519832  6月 23 13:50 builtin.o
-rw-r--r--. 1 oracle docker   28915  4月  5 16:38 cint_array.c
-rw-r--r--. 1 oracle docker  103608  6月 23 13:50 cint_array.o
-rw-r--r--. 1 oracle docker    5589  4月  5 16:37 cmd.h
-rw-r--r--. 1 oracle docker  101640  4月 12 18:02 command.c
-rw-r--r--. 1 oracle docker  153760  6月 23 13:50 command.o
-rw-r--r--. 1 oracle docker   39774  4月  5 16:38 command.y
-rwxr-xr-x. 1 oracle docker    7383  4月 11 03:29 compile
-rwxr-xr-x. 1 oracle docker   47840  4月 11 03:29 config.guess
-rw-r--r--. 1 oracle docker   14345  6月 23 13:48 config.h
-rw-r--r--. 1 oracle docker  132076  6月 23 13:48 config.log
-rwxr-xr-x. 1 oracle docker   18574  4月 11 03:29 config.rpath
-rwxr-xr-x. 1 oracle docker   43287  6月 23 13:48 config.status
-rwxr-xr-x. 1 oracle docker   31589  4月 11 03:29 config.sub
-rw-r--r--. 1 oracle docker   13627  4月 12 18:03 configh.in
-rwxr-xr-x. 1 oracle docker  375070  4月 12 18:03 configure
-rw-r--r--. 1 oracle docker   12818  4月 12 18:02 configure.ac
-rw-r--r--. 1 oracle docker    2355  4月  5 16:38 custom.h
-rw-r--r--. 1 oracle docker  142002  4月  5 16:38 debug.c
-rw-r--r--. 1 oracle docker  593376  6月 23 13:50 debug.o
-rwxr-xr-x. 1 oracle docker   23568  4月 11 03:29 depcomp
drwxr-xr-x. 3 oracle docker    4096  6月 23 13:48 doc
-rw-r--r--. 1 oracle docker   43584  4月  8 03:53 eval.c
-rw-r--r--. 1 oracle docker  449304  6月 23 13:50 eval.o
-rw-r--r--. 1 oracle docker    6983  4月  5 16:38 ext.c
-rw-r--r--. 1 oracle docker   52184  6月 23 13:50 ext.o
drwxr-xr-x. 7 oracle docker    4096  6月 23 13:50 extension
drwxr-xr-x. 2 oracle docker    4096  6月 23 13:48 extras
-rw-r--r--. 1 oracle docker   43912  4月  5 16:38 field.c
-rw-r--r--. 1 oracle docker  149752  6月 23 13:50 field.o
-rw-r--r--. 1 oracle docker    3457  4月  5 16:29 floatcomp.c
-rw-r--r--. 1 oracle docker   19976  6月 23 13:50 floatcomp.o
-rw-r--r--. 1 oracle docker    1873  4月  5 16:29 floatmagic.h
-rwxr-xr-x. 1 oracle docker 2583080  6月 23 13:50 gawk
-rw-r--r--. 1 oracle docker   35948  4月  5 16:38 gawkapi.c
-rw-r--r--. 1 oracle docker   40486  4月  5 16:38 gawkapi.h
-rw-r--r--. 1 oracle docker  134312  6月 23 13:50 gawkapi.o
-rw-r--r--. 1 oracle docker    1397  4月  5 16:37 gawkmisc.c
-rw-r--r--. 1 oracle docker   37544  6月 23 13:50 gawkmisc.o
-rw-r--r--. 1 oracle docker   10478  4月  5 16:37 gettext.h
-rwxr-xr-x. 1 oracle docker   15368  4月 11 03:29 install-sh
-rw-r--r--. 1 oracle docker   20750  4月  5 16:38 int_array.c
-rw-r--r--. 1 oracle docker   76472  6月 23 13:50 int_array.o
-rw-r--r--. 1 oracle docker   36205  4月  5 16:38 interpret.h
-rw-r--r--. 1 oracle docker  112095  4月  5 16:37 io.c
-rw-r--r--. 1 oracle docker  286528  6月 23 13:50 io.o
drwxr-xr-x. 2 oracle docker    4096  4月 12 18:23 m4
-rw-r--r--. 1 oracle docker   47396  4月  8 03:53 main.c
-rw-r--r--. 1 oracle docker  188640  6月 23 13:50 main.o
-rw-r--r--. 1 oracle docker    1678  4月  5 16:37 mbsupport.h
-rwxr-xr-x. 1 oracle docker    6872 12月 24 05:01 missing
drwxr-xr-x. 2 oracle docker    4096  4月 12 18:23 missing_d
-rwxr-xr-x. 1 oracle docker    3539  4月 11 03:29 mkinstalldirs
-rw-r--r--. 1 oracle docker   39262  4月  5 16:38 mpfr.c
-rw-r--r--. 1 oracle docker   19512  6月 23 13:50 mpfr.o
-rw-r--r--. 1 oracle docker    4130  4月  5 16:37 msg.c
-rw-r--r--. 1 oracle docker   31480  6月 23 13:50 msg.o
-rw-r--r--. 1 oracle docker   24798  4月  5 16:37 node.c
-rw-r--r--. 1 oracle docker   96816  6月 23 13:50 node.o
-rw-r--r--. 1 oracle docker    2988  4月  5 16:38 nonposix.h
drwxr-xr-x. 3 oracle docker    4096  4月 12 18:23 pc
drwxr-xr-x. 2 oracle docker    4096  6月 23 13:48 po
drwxr-xr-x. 2 oracle docker    4096  4月 12 18:25 posix
-rw-r--r--. 1 oracle docker   50514  4月  5 16:38 profile.c
-rw-r--r--. 1 oracle docker  218040  6月 23 13:50 profile.o
-rw-r--r--. 1 oracle docker    4385  4月  5 16:37 protos.h
-rw-r--r--. 1 oracle docker   16272  4月  5 16:38 re.c
-rw-r--r--. 1 oracle docker   70624  6月 23 13:50 re.o
-rw-r--r--. 1 oracle docker    2879  4月  5 16:38 replace.c
-rw-r--r--. 1 oracle docker   18496  6月 23 13:50 replace.o
-rw-r--r--. 1 oracle docker      23  6月 23 13:48 stamp-h1
-rw-r--r--. 1 oracle docker   20166  4月 11 04:06 str_array.c
-rw-r--r--. 1 oracle docker   70824  6月 23 13:50 str_array.o
drwxr-xr-x. 3 oracle docker    4096  6月 23 13:50 support
-rw-r--r--. 1 oracle docker   20703  4月  5 16:38 symbol.c
-rw-r--r--. 1 oracle docker   90808  6月 23 13:50 symbol.o
drwxr-xr-x. 5 oracle docker   36864  6月 23 13:48 test
-rw-r--r--. 1 oracle docker      66  7月 19  2018 version.c
-rw-r--r--. 1 oracle docker    2408  6月 23 13:50 version.o
drwxr-xr-x. 3 oracle docker    4096  4月 12 18:22 vms
-rwxr-xr-x. 1 oracle docker    6858 12月 24 05:01 ylwrap


[oracle@centos gawk-5.0.0]$ make install
Making install in support
make[1]: ディレクトリ `/home/oracle/ff/gawk-5.0.0/support' に入ります
make[2]: ディレクトリ `/home/oracle/ff/gawk-5.0.0/support' に入ります
make[2]: `install-exec-am' に対して行うべき事はありません.
make[2]: `install-data-am' に対して行うべき事はありません.
make[2]: ディレクトリ `/home/oracle/ff/gawk-5.0.0/support' から出ます
make[1]: ディレクトリ `/home/oracle/ff/gawk-5.0.0/support' から出ます
Making install in .
make[1]: ディレクトリ `/home/oracle/ff/gawk-5.0.0' に入ります
make[2]: ディレクトリ `/home/oracle/ff/gawk-5.0.0' に入ります
 /usr/bin/mkdir -p '/usr/local/bin'
  ./install-sh -c gawk '/usr/local/bin'
cp: 通常ファイル `/usr/local/bin/_inst.5085_' を作成できません: 許可がありません
make[2]: *** [install-binPROGRAMS] エラー 1
make[2]: ディレクトリ `/home/oracle/ff/gawk-5.0.0' から出ます
make[1]: *** [install-am] エラー 2
make[1]: ディレクトリ `/home/oracle/ff/gawk-5.0.0' から出ます
make: *** [install-recursive] エラー 1


[oracle@centos gawk-5.0.0]$ sudo make install

[oracle@centos gawk-5.0.0]$ which gawk
/usr/local/bin/gawk
[oracle@centos gawk-5.0.0]$ /usr/local/bin/gawk --version
GNU Awk 5.0.0, API: 2.0
Copyright (C) 1989, 1991-2019 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.

[oracle@centos gawk-5.0.0]$ ./gawk --version
GNU Awk 5.0.0, API: 2.0
Copyright (C) 1989, 1991-2019 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.

~/.bashrcぐらいに実行ファイルまでのエイリアス名付けておく

docにしかバージョン文言ないから嫌。あっ、だからシンボリックリンクの概念生まれたのか。。。コピーしてリネームしておけばいいのか!!

コード表示

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

alias unkommit="/usr/local/bin/unkommit.sh"
alias awk="/usr/local/bin/awk"
alias gawk="/usr/local/bin/awk"

[oracle@centos ~]$ cd /usr/local/bin/
[oracle@centos bin]$ ll
合計 20828
lrwxrwxrwx. 1 root root        4  6月 23 13:51 awk -> gawk
-rwxr-xr-x. 1 root root 16154160  5月 12 17:20 docker-compose
-rwxr-xr-x. 2 root root  2583080  6月 23 13:51 gawk
-rwxr-xr-x. 2 root root  2583080  6月 23 13:51 gawk-5.0.0
-rwxr-xr-x. 1 root root       34  4月  5 05:57 sqldeveloper
lrwxrwxrwx. 1 root root       32  6月 22 14:06 unkommit.sh -> /home/oracle/rr/.bin/unkommit.sh
[oracle@centos bin]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/oracle/.local/bin:/home/oracle/bin
[oracle@centos bin]$ ll
合計 20828
lrwxrwxrwx. 1 root root        4  6月 23 13:51 awk -> gawk
-rwxr-xr-x. 1 root root 16154160  5月 12 17:20 docker-compose
-rwxr-xr-x. 2 root root  2583080  6月 23 13:51 gawk
-rwxr-xr-x. 2 root root  2583080  6月 23 13:51 gawk-5.0.0
-rwxr-xr-x. 1 root root       34  4月  5 05:57 sqldeveloper
lrwxrwxrwx. 1 root root       32  6月 22 14:06 unkommit.sh -> /home/oracle/rr/.bin/unkommit.sh
[oracle@centos bin]$ pwd
/usr/local/bin
[oracle@centos bin]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/oracle/.local/bin:/home/oracle/bin
[oracle@centos bin]$ pwd
/usr/local/bin
[oracle@centos bin]$ ll
合計 20828
lrwxrwxrwx. 1 root root        4  6月 23 13:51 awk -> gawk
-rwxr-xr-x. 1 root root 16154160  5月 12 17:20 docker-compose
-rwxr-xr-x. 2 root root  2583080  6月 23 13:51 gawk
-rwxr-xr-x. 2 root root  2583080  6月 23 13:51 gawk-5.0.0
-rwxr-xr-x. 1 root root       34  4月  5 05:57 sqldeveloper
lrwxrwxrwx. 1 root root       32  6月 22 14:06 unkommit.sh -> /home/oracle/rr/.bin/unkommit.sh
[oracle@centos bin]$ which awk
alias awk='/usr/local/bin/awk'
	/usr/local/bin/awk
[oracle@centos bin]$ which gawk
alias gawk='/usr/local/bin/awk'
	/usr/local/bin/awk

asciiコード定義ファイルからasciiコード定義確認スクリプトを作ってみた話

まえがき

本当は自己収束型のシェルスクリプトを目指していたんだけど、脱線しすぎた。自己収束型っていうのは頭の中のイメージ。まだうまく言葉で表現できていないや。

参考文献

ASCII / ISO 8859-1 (Latin-1) Table with HTML Entity Names  

______$(echo -e ‘\U1F4A9’)______.sh

コード表示

#!/bin/bash

_insert_shebang(){
  FILE_NM=$1
  sed -i '1i#!/bin/bash\n' ${FILE_NM}
}

_grt_exec_priv(){
  FILE_NM=$1
  #echo -n "password:"
  read -s password echo ${password} | sudo -S chmod +x ${FILE_NM}
}

_exec(){
  FILE_NM=$1
  source ${FILE_NM}
}

_trap_rm_tmpdir(){
  local TMP_DIR=$1
  trap "rm -rf ${TMP_DIR}" EXIT
}

_clean(){
  local FNM=$1
  rm -f "${FNM}"
}

_def_ascii_code(){
  local FNM=$1
cat <<EOF >${FNM}
32&47
58&64
91&96
123&126
EOF
}

_def_ascii_cnst(){
  local FNM=$1
cat <<EOF >${FNM}
LNF='x0a'
SPA='x20'
ECM='x21'
DQT='x22'
NSG='x23'
DLR='x24'
PCT='x25'
AMP='x26'
SQT='x27'
LPS='x28'
RPS='x29'
AST='x2a'
PLS='x2b'
CNM='x2c'
PYN='x2d'
DOT='x2e'
SLS='x2f'
CLN='x3a'
SCN='x3b'
LTS='x3c'
EQL='x3d'
GTS='x3e'
QES='x3f'
ATM='x40'
LSB='x5b'
BSL='x5c'
RSB='x5d'
CLT='x5e'
USC='x5f'
BQT='x60'
LCB='x7b'
VTB='x7c'
RCB='x7d'
TLD='x7e'
EOF
}

_pre_prc(){
  local IPUT=$1
  sed -e '/^#!/d' -e '/^$/d' <<<${IPUT}
}

_mk_func_frame(){
  local FNM=$1
cat <<EOF >${FNM}
#!/bin/bash

source ./${SRC_FNM}

_f(){
  echo "" | awk '{
    @
  }'
}

_f
EOF
}

_mk_call_ascii_cnst(){
  local SRC_FNM=$1
  local TGT_FNM=$2
  local IPUT=$(while read LN;do
    local LFT=${LN%=*}
    _pre_prc ${LFT}
  done < <(cat ${SRC_FNM}))
  local TMP_DIR=$(mktemp -d)
  _trap_rm_tmpdir ${TMP_DIR}
  echo "${IPUT}" >${TMP_DIR}/tmp
  local BUILD_CMD=$(while read LN;do
    RN=$(echo ${LN} | sed -e 's/ .*//');
    ASCII_NM=$(echo ${LN} | sed -e 's/.* //');
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      ASCII_NM="'${ASCII_NM}'"
      DLR="\'${DLR}'"
      SPA="\'${SPA}'"
      LCB="\'${LCB}'"
      RCB="\'${RCB}'"
      BSL="\'${BSL}'"
      EQL="\'${EQL}'"
      DQT="\'${DQT}'"
      SQT="\'${SQT}'"
      LNF="\'${LNF}'"
    }
    {
      print ASCII_NM""EQL""DQT""BSL""BSL""BSL""SQT""DLR""LCB""ASCII_NM""RCB""SQT""DQT""LNF"""print"SPA""ASCII_NM""
    }
    '
  done < <(cat ${TMP_DIR}/tmp | nl))
  BUILD_CMD=$(echo "${BUILD_CMD}" | sed ':a;N;$!ba;s/\n/@/g')
  sed -i -e 's:@:'"$BUILD_CMD"':g' ${TGT_FNM}
  cat ${TGT_FNM} | tr '@' '\n' >${TMP_DIR}/tmpp
  cp ${TMP_DIR}/tmpp ${TGT_FNM}
}

_main(){
  SRC_FNM=$1
  TGT_FNM=$2
  source ./${SRC_FNM}
  _clean ${SRC_FNM}
  _def_ascii_cnst ${SRC_FNM}
  _insert_shebang ${SRC_FNM}
  _grt_exec_priv ${SRC_FNM}
  _clean ${TGT_FNM}
  _mk_func_frame ${TGT_FNM}
  _mk_call_ascii_cnst ${SRC_FNM} ${TGT_FNM}
  _grt_exec_priv ${TGT_FNM}
  _exec ${TGT_FNM}
}

_main def_ascii_cnst.sh call_ascii_cnst.sh

実行例


[oracle@centos rr]$ ll
合計 48
-rw-r--r--. 1 oracle docker   95  6月 10 00:42 README.md
-rw-r--r--. 1 oracle docker  965  6月 14 19:49 call_ascii_cnst.sh
drwxr-xr-x. 3 oracle docker 4096  6月  9 18:28 cnst
-rw-r--r--. 1 oracle docker  353  6月 14 20:00 def_ascii_cnst.sh
drwxr-xr-x. 4 oracle docker 4096  6月  9 18:28 func
drwxr-xr-x. 2 oracle docker 4096  6月  9 18:28 iput
drwxr-xr-x. 5 oracle docker 4096  6月 10 21:26 main
-rwxr-xr-x. 1 oracle docker 1160  6月 13 07:33 t.sh
drwxr-xr-x. 5 oracle docker 4096  6月 14 14:24 test
-rwxr-xr-x. 1 oracle docker 4228  6月 14 19:50 tt.sh
drwxr-xr-x. 2 oracle docker 4096  6月 13 07:23 util
[oracle@centos rr]$ vi ______$(echo -e '\U1F4A9')______.sh
[oracle@centos rr]$ ll
合計 52
-rw-r--r--. 1 oracle docker   95  6月 10 00:42 README.md
-rw-r--r--. 1 oracle docker 2435  6月 14 20:02 ______?______.sh
-rw-r--r--. 1 oracle docker  965  6月 14 19:49 call_ascii_cnst.sh
drwxr-xr-x. 3 oracle docker 4096  6月  9 18:28 cnst
-rw-r--r--. 1 oracle docker  353  6月 14 20:00 def_ascii_cnst.sh
drwxr-xr-x. 4 oracle docker 4096  6月  9 18:28 func
drwxr-xr-x. 2 oracle docker 4096  6月  9 18:28 iput
drwxr-xr-x. 5 oracle docker 4096  6月 10 21:26 main
-rwxr-xr-x. 1 oracle docker 1160  6月 13 07:33 t.sh
drwxr-xr-x. 5 oracle docker 4096  6月 14 14:24 test
-rwxr-xr-x. 1 oracle docker 4228  6月 14 19:50 tt.sh
drwxr-xr-x. 2 oracle docker 4096  6月 13 07:23 util
[oracle@centos rr]$ ./______$(echo -e '\U1F4A9')______.sh
bash: ./______💩______.sh: 許可がありません
[oracle@centos rr]$ chmod +x ______$(echo -e '\U1F4A9')______.sh
[oracle@centos rr]$ ll
合計 52
-rw-r--r--. 1 oracle docker   95  6月 10 00:42 README.md
-rwxr-xr-x. 1 oracle docker 2435  6月 14 20:02 ______?______.sh
-rw-r--r--. 1 oracle docker  965  6月 14 19:49 call_ascii_cnst.sh
drwxr-xr-x. 3 oracle docker 4096  6月  9 18:28 cnst
-rw-r--r--. 1 oracle docker  353  6月 14 20:03 def_ascii_cnst.sh
drwxr-xr-x. 4 oracle docker 4096  6月  9 18:28 func
drwxr-xr-x. 2 oracle docker 4096  6月  9 18:28 iput
drwxr-xr-x. 5 oracle docker 4096  6月 10 21:26 main
-rwxr-xr-x. 1 oracle docker 1160  6月 13 07:33 t.sh
drwxr-xr-x. 5 oracle docker 4096  6月 14 14:24 test
-rwxr-xr-x. 1 oracle docker 4228  6月 14 19:50 tt.sh
drwxr-xr-x. 2 oracle docker 4096  6月 13 07:23 util
[oracle@centos rr]$ ./______$(echo -e '\U1F4A9')______.sh | nl
[sudo] oracle のパスワード:
[sudo] oracle のパスワード:
       
       
     1	 
     2	!
     3	"
     4	#
     5	$
     6	%
     7	&
     8	'
     9	(
    10	)
    11	*
    12	+
    13	,
    14	-
    15	.
    16	/
    17	:
    18	;
    19	<
    20	=
    21	>
    22	?
    23	@
    24	[
    25	\
    26	]
    27	^
    28	_
    29	`
    30	{
    31	|
    32	}
    33	~
[oracle@centos rr]$ 

あとがき

ファイル名にうんこが描けたのが収穫。awkはエスケープ専門で使ったらよさそうかな。使い易い。さて、ランニングするぞー!fin。

Unicodeで管理している文字集合をエンコーディング方式UTF-8で色々出力してみた話

まえがき

unicode12.0が2019年6月12日にでて、ニュースで知ったので、ちょっとだけ触れて見ることにした。文字すき。unicodeって名前かっこいい。コードポイント覚えよう。。楽しい。b^^

 

参考文献

emojiに分類名つけるのに役に立つよ

Unicode® Character Name Index  

emojiもコード化

Unicode絵文字(Emoji)  

公式ページ

The Unicode Consortium  

忘れたから調べた

ビット(bit)とバイト(Byte) 情報量の単位と2進数  

Wikiは安定

Unicode一覧 0000-0FFF  

emoji特化

Complete List of Emoji  

ここのフォントをダウンロードしてきました

Google Noto Fonts  

いんすこ時に参照

シェル上で🍣🍣(Unicode絵文字)を表示させる  

ターミナルに表示する際に参照

bashでUnicodeのコードポイントを扱う  

ここをみればビット演算周り思い出せそう

Bash $((算術式)) のすべて - A 基本編  

ダンプコマンド

od コマンド  

endianオプションなくない??

エンディアンの変更  

絵文字いんすこ

コード表示

[oracle@centos gg]$ mkdir ~/.fonts && cd ~/.fonts
[oracle@centos .fonts]$ curl -LO https://noto-website-2.storage.googleapis.com/pkgs/Noto-unhinted.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1062M  100 1062M    0     0  39.8M      0  0:00:26  0:00:26 --:--:-- 44.1M
[oracle@centos .fonts]$ ll
合計 1088444
-rw-r--r--. 1 oracle docker 1114561068  6月 14 09:11 Noto-unhinted.zip
[oracle@centos .fonts]$ unzip Noto-unhinted.zip && rm Noto-unhinted.zip
Archive:  Noto-unhinted.zip
  inflating: LICENSE_OFL.txt         
  inflating: NotoColorEmoji.ttf      
  inflating: NotoEmoji-Regular.ttf   
  inflating: NotoKufiArabic-Bold.ttf  
  inflating: NotoKufiArabic-Regular.ttf  
  inflating: NotoMono-Regular.ttf    
  inflating: NotoNaskhArabic-Bold.ttf  
  inflating: NotoNaskhArabic-Regular.ttf  
  inflating: NotoNaskhArabicUI-Bold.ttf  
  inflating: NotoNaskhArabicUI-Regular.ttf  
  inflating: NotoNastaliqUrdu-Regular.ttf  
  inflating: NotoSans-Black.ttf      
  inflating: NotoSans-BlackItalic.ttf  
  inflating: NotoSans-Bold.ttf       
  inflating: NotoSans-BoldItalic.ttf  
  inflating: NotoSans-Condensed.ttf  
  inflating: NotoSans-CondensedBlack.ttf  
  inflating: NotoSans-CondensedBlackItalic.ttf  
  inflating: NotoSans-CondensedBold.ttf  
  inflating: NotoSans-CondensedBoldItalic.ttf  
  inflating: NotoSans-CondensedExtraBold.ttf  
  inflating: NotoSans-CondensedExtraBoldItalic.ttf  
  inflating: NotoSans-CondensedExtraLight.ttf  
  inflating: NotoSans-CondensedExtraLightItalic.ttf  
  inflating: NotoSans-CondensedItalic.ttf  
  inflating: NotoSans-CondensedLight.ttf  
  inflating: NotoSans-CondensedLightItalic.ttf  
  inflating: NotoSans-CondensedMedium.ttf  
  inflating: NotoSans-CondensedMediumItalic.ttf  
  inflating: NotoSans-CondensedSemiBold.ttf  
  inflating: NotoSans-CondensedSemiBoldItalic.ttf  
  inflating: NotoSans-CondensedThin.ttf  
  inflating: NotoSans-CondensedThinItalic.ttf  
  inflating: NotoSans-ExtraBold.ttf  
  inflating: NotoSans-ExtraBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensed.ttf  
  inflating: NotoSans-ExtraCondensedBlack.ttf  
  inflating: NotoSans-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSans-ExtraCondensedBold.ttf  
  inflating: NotoSans-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensedExtraBold.ttf  
  inflating: NotoSans-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensedExtraLight.ttf  
  inflating: NotoSans-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSans-ExtraCondensedItalic.ttf  
  inflating: NotoSans-ExtraCondensedLight.ttf  
  inflating: NotoSans-ExtraCondensedLightItalic.ttf  
  inflating: NotoSans-ExtraCondensedMedium.ttf  
  inflating: NotoSans-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSans-ExtraCondensedSemiBold.ttf  
  inflating: NotoSans-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSans-ExtraCondensedThin.ttf  
  inflating: NotoSans-ExtraCondensedThinItalic.ttf  
  inflating: NotoSans-ExtraLight.ttf  
  inflating: NotoSans-ExtraLightItalic.ttf  
  inflating: NotoSans-Italic.ttf     
  inflating: NotoSans-Light.ttf      
  inflating: NotoSans-LightItalic.ttf  
  inflating: NotoSans-Medium.ttf     
  inflating: NotoSans-MediumItalic.ttf  
  inflating: NotoSans-Regular.ttf    
  inflating: NotoSans-SemiBold.ttf   
  inflating: NotoSans-SemiBoldItalic.ttf  
  inflating: NotoSans-SemiCondensed.ttf  
  inflating: NotoSans-SemiCondensedBlack.ttf  
  inflating: NotoSans-SemiCondensedBlackItalic.ttf  
  inflating: NotoSans-SemiCondensedBold.ttf  
  inflating: NotoSans-SemiCondensedBoldItalic.ttf  
  inflating: NotoSans-SemiCondensedExtraBold.ttf  
  inflating: NotoSans-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSans-SemiCondensedExtraLight.ttf  
  inflating: NotoSans-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSans-SemiCondensedItalic.ttf  
  inflating: NotoSans-SemiCondensedLight.ttf  
  inflating: NotoSans-SemiCondensedLightItalic.ttf  
  inflating: NotoSans-SemiCondensedMedium.ttf  
  inflating: NotoSans-SemiCondensedMediumItalic.ttf  
  inflating: NotoSans-SemiCondensedSemiBold.ttf  
  inflating: NotoSans-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSans-SemiCondensedThin.ttf  
  inflating: NotoSans-SemiCondensedThinItalic.ttf  
  inflating: NotoSans-Thin.ttf       
  inflating: NotoSans-ThinItalic.ttf  
  inflating: NotoSansAdlam-Regular.ttf  
  inflating: NotoSansAdlamUnjoined-Regular.ttf  
  inflating: NotoSansAnatolianHieroglyphs-Regular.ttf  
  inflating: NotoSansArabic-Black.ttf  
  inflating: NotoSansArabic-Bold.ttf  
  inflating: NotoSansArabic-Condensed.ttf  
  inflating: NotoSansArabic-CondensedBlack.ttf  
  inflating: NotoSansArabic-CondensedBold.ttf  
  inflating: NotoSansArabic-CondensedExtraBold.ttf  
  inflating: NotoSansArabic-CondensedExtraLight.ttf  
  inflating: NotoSansArabic-CondensedLight.ttf  
  inflating: NotoSansArabic-CondensedMedium.ttf  
  inflating: NotoSansArabic-CondensedSemiBold.ttf  
  inflating: NotoSansArabic-CondensedThin.ttf  
  inflating: NotoSansArabic-ExtraBold.ttf  
  inflating: NotoSansArabic-ExtraCondensed.ttf  
  inflating: NotoSansArabic-ExtraCondensedBlack.ttf  
  inflating: NotoSansArabic-ExtraCondensedBold.ttf  
  inflating: NotoSansArabic-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansArabic-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansArabic-ExtraCondensedLight.ttf  
  inflating: NotoSansArabic-ExtraCondensedMedium.ttf  
  inflating: NotoSansArabic-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansArabic-ExtraCondensedThin.ttf  
  inflating: NotoSansArabic-ExtraLight.ttf  
  inflating: NotoSansArabic-Light.ttf  
  inflating: NotoSansArabic-Medium.ttf  
  inflating: NotoSansArabic-Regular.ttf  
  inflating: NotoSansArabic-SemiBold.ttf  
  inflating: NotoSansArabic-SemiCondensed.ttf  
  inflating: NotoSansArabic-SemiCondensedBlack.ttf  
  inflating: NotoSansArabic-SemiCondensedBold.ttf  
  inflating: NotoSansArabic-SemiCondensedExtraBold.ttf  
  inflating: NotoSansArabic-SemiCondensedExtraLight.ttf  
  inflating: NotoSansArabic-SemiCondensedLight.ttf  
  inflating: NotoSansArabic-SemiCondensedMedium.ttf  
  inflating: NotoSansArabic-SemiCondensedSemiBold.ttf  
  inflating: NotoSansArabic-SemiCondensedThin.ttf  
  inflating: NotoSansArabic-Thin.ttf  
  inflating: NotoSansArabicUI-Black.ttf  
  inflating: NotoSansArabicUI-Bold.ttf  
  inflating: NotoSansArabicUI-Condensed.ttf  
  inflating: NotoSansArabicUI-CondensedBlack.ttf  
  inflating: NotoSansArabicUI-CondensedBold.ttf  
  inflating: NotoSansArabicUI-CondensedExtraBold.ttf  
  inflating: NotoSansArabicUI-CondensedExtraLight.ttf  
  inflating: NotoSansArabicUI-CondensedLight.ttf  
  inflating: NotoSansArabicUI-CondensedMedium.ttf  
  inflating: NotoSansArabicUI-CondensedSemiBold.ttf  
  inflating: NotoSansArabicUI-CondensedThin.ttf  
  inflating: NotoSansArabicUI-ExtraBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensed.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedLight.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansArabicUI-ExtraCondensedThin.ttf  
  inflating: NotoSansArabicUI-ExtraLight.ttf  
  inflating: NotoSansArabicUI-Light.ttf  
  inflating: NotoSansArabicUI-Medium.ttf  
  inflating: NotoSansArabicUI-Regular.ttf  
  inflating: NotoSansArabicUI-SemiBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensed.ttf  
  inflating: NotoSansArabicUI-SemiCondensedBlack.ttf  
  inflating: NotoSansArabicUI-SemiCondensedBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansArabicUI-SemiCondensedLight.ttf  
  inflating: NotoSansArabicUI-SemiCondensedMedium.ttf  
  inflating: NotoSansArabicUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansArabicUI-SemiCondensedThin.ttf  
  inflating: NotoSansArabicUI-Thin.ttf  
  inflating: NotoSansArmenian-Black.ttf  
  inflating: NotoSansArmenian-Bold.ttf  
  inflating: NotoSansArmenian-Condensed.ttf  
  inflating: NotoSansArmenian-CondensedBlack.ttf  
  inflating: NotoSansArmenian-CondensedBold.ttf  
  inflating: NotoSansArmenian-CondensedExtraBold.ttf  
  inflating: NotoSansArmenian-CondensedExtraLight.ttf  
  inflating: NotoSansArmenian-CondensedLight.ttf  
  inflating: NotoSansArmenian-CondensedMedium.ttf  
  inflating: NotoSansArmenian-CondensedSemiBold.ttf  
  inflating: NotoSansArmenian-CondensedThin.ttf  
  inflating: NotoSansArmenian-ExtraBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensed.ttf  
  inflating: NotoSansArmenian-ExtraCondensedBlack.ttf  
  inflating: NotoSansArmenian-ExtraCondensedBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansArmenian-ExtraCondensedLight.ttf  
  inflating: NotoSansArmenian-ExtraCondensedMedium.ttf  
  inflating: NotoSansArmenian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansArmenian-ExtraCondensedThin.ttf  
  inflating: NotoSansArmenian-ExtraLight.ttf  
  inflating: NotoSansArmenian-Light.ttf  
  inflating: NotoSansArmenian-Medium.ttf  
  inflating: NotoSansArmenian-Regular.ttf  
  inflating: NotoSansArmenian-SemiBold.ttf  
  inflating: NotoSansArmenian-SemiCondensed.ttf  
  inflating: NotoSansArmenian-SemiCondensedBlack.ttf  
  inflating: NotoSansArmenian-SemiCondensedBold.ttf  
  inflating: NotoSansArmenian-SemiCondensedExtraBold.ttf  
  inflating: NotoSansArmenian-SemiCondensedExtraLight.ttf  
  inflating: NotoSansArmenian-SemiCondensedLight.ttf  
  inflating: NotoSansArmenian-SemiCondensedMedium.ttf  
  inflating: NotoSansArmenian-SemiCondensedSemiBold.ttf  
  inflating: NotoSansArmenian-SemiCondensedThin.ttf  
  inflating: NotoSansArmenian-Thin.ttf  
  inflating: NotoSansAvestan-Regular.ttf  
  inflating: NotoSansBalinese-Regular.ttf  
  inflating: NotoSansBamum-Regular.ttf  
  inflating: NotoSansBatak-Regular.ttf  
  inflating: NotoSansBengali-Black.ttf  
  inflating: NotoSansBengali-Bold.ttf  
  inflating: NotoSansBengali-ExtraBold.ttf  
  inflating: NotoSansBengali-ExtraLight.ttf  
  inflating: NotoSansBengali-Light.ttf  
  inflating: NotoSansBengali-Medium.ttf  
  inflating: NotoSansBengali-Regular.ttf  
  inflating: NotoSansBengali-SemiBold.ttf  
  inflating: NotoSansBengali-Thin.ttf  
  inflating: NotoSansBengaliUI-Black.ttf  
  inflating: NotoSansBengaliUI-Bold.ttf  
  inflating: NotoSansBengaliUI-ExtraBold.ttf  
  inflating: NotoSansBengaliUI-ExtraLight.ttf  
  inflating: NotoSansBengaliUI-Light.ttf  
  inflating: NotoSansBengaliUI-Medium.ttf  
  inflating: NotoSansBengaliUI-Regular.ttf  
  inflating: NotoSansBengaliUI-SemiBold.ttf  
  inflating: NotoSansBengaliUI-Thin.ttf  
  inflating: NotoSansBrahmi-Regular.ttf  
  inflating: NotoSansBuginese-Regular.ttf  
  inflating: NotoSansBuhid-Regular.ttf  
  inflating: NotoSansCJKjp-Black.otf  
  inflating: NotoSansCJKjp-Bold.otf  
  inflating: NotoSansCJKjp-DemiLight.otf  
  inflating: NotoSansCJKjp-Light.otf  
  inflating: NotoSansCJKjp-Medium.otf  
  inflating: NotoSansCJKjp-Regular.otf  
  inflating: NotoSansCJKjp-Thin.otf  
  inflating: NotoSansCJKkr-Black.otf  
  inflating: NotoSansCJKkr-Bold.otf  
  inflating: NotoSansCJKkr-DemiLight.otf  
  inflating: NotoSansCJKkr-Light.otf  
  inflating: NotoSansCJKkr-Medium.otf  
  inflating: NotoSansCJKkr-Regular.otf  
  inflating: NotoSansCJKkr-Thin.otf  
  inflating: NotoSansCJKsc-Black.otf  
  inflating: NotoSansCJKsc-Bold.otf  
  inflating: NotoSansCJKsc-DemiLight.otf  
  inflating: NotoSansCJKsc-Light.otf  
  inflating: NotoSansCJKsc-Medium.otf  
  inflating: NotoSansCJKsc-Regular.otf  
  inflating: NotoSansCJKsc-Thin.otf  
  inflating: NotoSansCJKtc-Black.otf  
  inflating: NotoSansCJKtc-Bold.otf  
  inflating: NotoSansCJKtc-DemiLight.otf  
  inflating: NotoSansCJKtc-Light.otf  
  inflating: NotoSansCJKtc-Medium.otf  
  inflating: NotoSansCJKtc-Regular.otf  
  inflating: NotoSansCJKtc-Thin.otf  
  inflating: NotoSansCanadianAboriginal-Regular.ttf  
  inflating: NotoSansCarian-Regular.ttf  
  inflating: NotoSansChakma-Regular.ttf  
  inflating: NotoSansCham-Black.ttf  
  inflating: NotoSansCham-Bold.ttf   
  inflating: NotoSansCham-ExtraBold.ttf  
  inflating: NotoSansCham-ExtraLight.ttf  
  inflating: NotoSansCham-Light.ttf  
  inflating: NotoSansCham-Medium.ttf  
  inflating: NotoSansCham-Regular.ttf  
  inflating: NotoSansCham-SemiBold.ttf  
  inflating: NotoSansCham-Thin.ttf   
  inflating: NotoSansCherokee-Black.ttf  
  inflating: NotoSansCherokee-Bold.ttf  
  inflating: NotoSansCherokee-ExtraBold.ttf  
  inflating: NotoSansCherokee-ExtraLight.ttf  
  inflating: NotoSansCherokee-Light.ttf  
  inflating: NotoSansCherokee-Medium.ttf  
  inflating: NotoSansCherokee-Regular.ttf  
  inflating: NotoSansCherokee-SemiBold.ttf  
  inflating: NotoSansCherokee-Thin.ttf  
  inflating: NotoSansCoptic-Regular.ttf  
  inflating: NotoSansCuneiform-Regular.ttf  
  inflating: NotoSansCypriot-Regular.ttf  
  inflating: NotoSansDeseret-Regular.ttf  
  inflating: NotoSansDevanagari-Black.ttf  
  inflating: NotoSansDevanagari-Bold.ttf  
  inflating: NotoSansDevanagari-Condensed.ttf  
  inflating: NotoSansDevanagari-CondensedBlack.ttf  
  inflating: NotoSansDevanagari-CondensedBold.ttf  
  inflating: NotoSansDevanagari-CondensedExtraBold.ttf  
  inflating: NotoSansDevanagari-CondensedExtraLight.ttf  
  inflating: NotoSansDevanagari-CondensedLight.ttf  
  inflating: NotoSansDevanagari-CondensedMedium.ttf  
  inflating: NotoSansDevanagari-CondensedSemiBold.ttf  
  inflating: NotoSansDevanagari-CondensedThin.ttf  
  inflating: NotoSansDevanagari-ExtraBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensed.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedBlack.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedLight.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedMedium.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansDevanagari-ExtraCondensedThin.ttf  
  inflating: NotoSansDevanagari-ExtraLight.ttf  
  inflating: NotoSansDevanagari-Light.ttf  
  inflating: NotoSansDevanagari-Medium.ttf  
  inflating: NotoSansDevanagari-Regular.ttf  
  inflating: NotoSansDevanagari-SemiBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensed.ttf  
  inflating: NotoSansDevanagari-SemiCondensedBlack.ttf  
  inflating: NotoSansDevanagari-SemiCondensedBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensedExtraBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensedExtraLight.ttf  
  inflating: NotoSansDevanagari-SemiCondensedLight.ttf  
  inflating: NotoSansDevanagari-SemiCondensedMedium.ttf  
  inflating: NotoSansDevanagari-SemiCondensedSemiBold.ttf  
  inflating: NotoSansDevanagari-SemiCondensedThin.ttf  
  inflating: NotoSansDevanagari-Thin.ttf  
  inflating: NotoSansDevanagariUI-Black.ttf  
  inflating: NotoSansDevanagariUI-Bold.ttf  
  inflating: NotoSansDevanagariUI-Condensed.ttf  
  inflating: NotoSansDevanagariUI-CondensedBlack.ttf  
  inflating: NotoSansDevanagariUI-CondensedBold.ttf  
  inflating: NotoSansDevanagariUI-CondensedExtraBold.ttf  
  inflating: NotoSansDevanagariUI-CondensedExtraLight.ttf  
  inflating: NotoSansDevanagariUI-CondensedLight.ttf  
  inflating: NotoSansDevanagariUI-CondensedMedium.ttf  
  inflating: NotoSansDevanagariUI-CondensedSemiBold.ttf  
  inflating: NotoSansDevanagariUI-CondensedThin.ttf  
  inflating: NotoSansDevanagariUI-ExtraBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensed.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedLight.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansDevanagariUI-ExtraCondensedThin.ttf  
  inflating: NotoSansDevanagariUI-ExtraLight.ttf  
  inflating: NotoSansDevanagariUI-Light.ttf  
  inflating: NotoSansDevanagariUI-Medium.ttf  
  inflating: NotoSansDevanagariUI-Regular.ttf  
  inflating: NotoSansDevanagariUI-SemiBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensed.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedBlack.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedLight.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedMedium.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansDevanagariUI-SemiCondensedThin.ttf  
  inflating: NotoSansDevanagariUI-Thin.ttf  
  inflating: NotoSansDisplay-Black.ttf  
  inflating: NotoSansDisplay-BlackItalic.ttf  
  inflating: NotoSansDisplay-Bold.ttf  
  inflating: NotoSansDisplay-BoldItalic.ttf  
  inflating: NotoSansDisplay-Condensed.ttf  
  inflating: NotoSansDisplay-CondensedBlack.ttf  
  inflating: NotoSansDisplay-CondensedBlackItalic.ttf  
  inflating: NotoSansDisplay-CondensedBold.ttf  
  inflating: NotoSansDisplay-CondensedBoldItalic.ttf  
  inflating: NotoSansDisplay-CondensedExtraBold.ttf  
  inflating: NotoSansDisplay-CondensedExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-CondensedExtraLight.ttf  
  inflating: NotoSansDisplay-CondensedExtraLightItalic.ttf  
  inflating: NotoSansDisplay-CondensedItalic.ttf  
  inflating: NotoSansDisplay-CondensedLight.ttf  
  inflating: NotoSansDisplay-CondensedLightItalic.ttf  
  inflating: NotoSansDisplay-CondensedMedium.ttf  
  inflating: NotoSansDisplay-CondensedMediumItalic.ttf  
  inflating: NotoSansDisplay-CondensedSemiBold.ttf  
  inflating: NotoSansDisplay-CondensedSemiBoldItalic.ttf  
  inflating: NotoSansDisplay-CondensedThin.ttf  
  inflating: NotoSansDisplay-CondensedThinItalic.ttf  
  inflating: NotoSansDisplay-ExtraBold.ttf  
  inflating: NotoSansDisplay-ExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensed.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBlack.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBold.ttf  
  inflating: NotoSansDisplay-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansDisplay-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedLight.ttf  
  inflating: NotoSansDisplay-ExtraCondensedLightItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedMedium.ttf  
  inflating: NotoSansDisplay-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansDisplay-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSansDisplay-ExtraCondensedThin.ttf  
  inflating: NotoSansDisplay-ExtraCondensedThinItalic.ttf  
  inflating: NotoSansDisplay-ExtraLight.ttf  
  inflating: NotoSansDisplay-ExtraLightItalic.ttf  
  inflating: NotoSansDisplay-Italic.ttf  
  inflating: NotoSansDisplay-Light.ttf  
  inflating: NotoSansDisplay-LightItalic.ttf  
  inflating: NotoSansDisplay-Medium.ttf  
  inflating: NotoSansDisplay-MediumItalic.ttf  
  inflating: NotoSansDisplay-Regular.ttf  
  inflating: NotoSansDisplay-SemiBold.ttf  
  inflating: NotoSansDisplay-SemiBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensed.ttf  
  inflating: NotoSansDisplay-SemiCondensedBlack.ttf  
  inflating: NotoSansDisplay-SemiCondensedBlackItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedBold.ttf  
  inflating: NotoSansDisplay-SemiCondensedBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraBold.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraLight.ttf  
  inflating: NotoSansDisplay-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedLight.ttf  
  inflating: NotoSansDisplay-SemiCondensedLightItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedMedium.ttf  
  inflating: NotoSansDisplay-SemiCondensedMediumItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedSemiBold.ttf  
  inflating: NotoSansDisplay-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSansDisplay-SemiCondensedThin.ttf  
  inflating: NotoSansDisplay-SemiCondensedThinItalic.ttf  
  inflating: NotoSansDisplay-Thin.ttf  
  inflating: NotoSansDisplay-ThinItalic.ttf  
  inflating: NotoSansEgyptianHieroglyphs-Regular.ttf  
  inflating: NotoSansEthiopic-Black.ttf  
  inflating: NotoSansEthiopic-Bold.ttf  
  inflating: NotoSansEthiopic-Condensed.ttf  
  inflating: NotoSansEthiopic-CondensedBlack.ttf  
  inflating: NotoSansEthiopic-CondensedBold.ttf  
  inflating: NotoSansEthiopic-CondensedExtraBold.ttf  
  inflating: NotoSansEthiopic-CondensedExtraLight.ttf  
  inflating: NotoSansEthiopic-CondensedLight.ttf  
  inflating: NotoSansEthiopic-CondensedMedium.ttf  
  inflating: NotoSansEthiopic-CondensedSemiBold.ttf  
  inflating: NotoSansEthiopic-CondensedThin.ttf  
  inflating: NotoSansEthiopic-ExtraBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensed.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedBlack.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedLight.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedMedium.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansEthiopic-ExtraCondensedThin.ttf  
  inflating: NotoSansEthiopic-ExtraLight.ttf  
  inflating: NotoSansEthiopic-Light.ttf  
  inflating: NotoSansEthiopic-Medium.ttf  
  inflating: NotoSansEthiopic-Regular.ttf  
  inflating: NotoSansEthiopic-SemiBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensed.ttf  
  inflating: NotoSansEthiopic-SemiCondensedBlack.ttf  
  inflating: NotoSansEthiopic-SemiCondensedBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensedExtraBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensedExtraLight.ttf  
  inflating: NotoSansEthiopic-SemiCondensedLight.ttf  
  inflating: NotoSansEthiopic-SemiCondensedMedium.ttf  
  inflating: NotoSansEthiopic-SemiCondensedSemiBold.ttf  
  inflating: NotoSansEthiopic-SemiCondensedThin.ttf  
  inflating: NotoSansEthiopic-Thin.ttf  
  inflating: NotoSansGeorgian-Black.ttf  
  inflating: NotoSansGeorgian-Bold.ttf  
  inflating: NotoSansGeorgian-Condensed.ttf  
  inflating: NotoSansGeorgian-CondensedBlack.ttf  
  inflating: NotoSansGeorgian-CondensedBold.ttf  
  inflating: NotoSansGeorgian-CondensedExtraBold.ttf  
  inflating: NotoSansGeorgian-CondensedExtraLight.ttf  
  inflating: NotoSansGeorgian-CondensedLight.ttf  
  inflating: NotoSansGeorgian-CondensedMedium.ttf  
  inflating: NotoSansGeorgian-CondensedSemiBold.ttf  
  inflating: NotoSansGeorgian-CondensedThin.ttf  
  inflating: NotoSansGeorgian-ExtraBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensed.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedBlack.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedLight.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedMedium.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansGeorgian-ExtraCondensedThin.ttf  
  inflating: NotoSansGeorgian-ExtraLight.ttf  
  inflating: NotoSansGeorgian-Light.ttf  
  inflating: NotoSansGeorgian-Medium.ttf  
  inflating: NotoSansGeorgian-Regular.ttf  
  inflating: NotoSansGeorgian-SemiBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensed.ttf  
  inflating: NotoSansGeorgian-SemiCondensedBlack.ttf  
  inflating: NotoSansGeorgian-SemiCondensedBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensedExtraBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensedExtraLight.ttf  
  inflating: NotoSansGeorgian-SemiCondensedLight.ttf  
  inflating: NotoSansGeorgian-SemiCondensedMedium.ttf  
  inflating: NotoSansGeorgian-SemiCondensedSemiBold.ttf  
  inflating: NotoSansGeorgian-SemiCondensedThin.ttf  
  inflating: NotoSansGeorgian-Thin.ttf  
  inflating: NotoSansGlagolitic-Regular.ttf  
  inflating: NotoSansGothic-Regular.ttf  
  inflating: NotoSansGujarati-Bold.ttf  
  inflating: NotoSansGujarati-Regular.ttf  
  inflating: NotoSansGujaratiUI-Bold.ttf  
  inflating: NotoSansGujaratiUI-Regular.ttf  
  inflating: NotoSansGurmukhi-Bold.ttf  
  inflating: NotoSansGurmukhi-Regular.ttf  
  inflating: NotoSansGurmukhiUI-Bold.ttf  
  inflating: NotoSansGurmukhiUI-Regular.ttf  
  inflating: NotoSansHanunoo-Regular.ttf  
  inflating: NotoSansHebrew-Black.ttf  
  inflating: NotoSansHebrew-Bold.ttf  
  inflating: NotoSansHebrew-Condensed.ttf  
  inflating: NotoSansHebrew-CondensedBlack.ttf  
  inflating: NotoSansHebrew-CondensedBold.ttf  
  inflating: NotoSansHebrew-CondensedExtraBold.ttf  
  inflating: NotoSansHebrew-CondensedExtraLight.ttf  
  inflating: NotoSansHebrew-CondensedLight.ttf  
  inflating: NotoSansHebrew-CondensedMedium.ttf  
  inflating: NotoSansHebrew-CondensedSemiBold.ttf  
  inflating: NotoSansHebrew-CondensedThin.ttf  
  inflating: NotoSansHebrew-ExtraBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensed.ttf  
  inflating: NotoSansHebrew-ExtraCondensedBlack.ttf  
  inflating: NotoSansHebrew-ExtraCondensedBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansHebrew-ExtraCondensedLight.ttf  
  inflating: NotoSansHebrew-ExtraCondensedMedium.ttf  
  inflating: NotoSansHebrew-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansHebrew-ExtraCondensedThin.ttf  
  inflating: NotoSansHebrew-ExtraLight.ttf  
  inflating: NotoSansHebrew-Light.ttf  
  inflating: NotoSansHebrew-Medium.ttf  
  inflating: NotoSansHebrew-Regular.ttf  
  inflating: NotoSansHebrew-SemiBold.ttf  
  inflating: NotoSansHebrew-SemiCondensed.ttf  
  inflating: NotoSansHebrew-SemiCondensedBlack.ttf  
  inflating: NotoSansHebrew-SemiCondensedBold.ttf  
  inflating: NotoSansHebrew-SemiCondensedExtraBold.ttf  
  inflating: NotoSansHebrew-SemiCondensedExtraLight.ttf  
  inflating: NotoSansHebrew-SemiCondensedLight.ttf  
  inflating: NotoSansHebrew-SemiCondensedMedium.ttf  
  inflating: NotoSansHebrew-SemiCondensedSemiBold.ttf  
  inflating: NotoSansHebrew-SemiCondensedThin.ttf  
  inflating: NotoSansHebrew-Thin.ttf  
  inflating: NotoSansImperialAramaic-Regular.ttf  
  inflating: NotoSansInscriptionalPahlavi-Regular.ttf  
  inflating: NotoSansInscriptionalParthian-Regular.ttf  
  inflating: NotoSansJavanese-Regular.ttf  
  inflating: NotoSansKaithi-Regular.ttf  
  inflating: NotoSansKannada-Bold.ttf  
  inflating: NotoSansKannada-Regular.ttf  
  inflating: NotoSansKannadaUI-Bold.ttf  
  inflating: NotoSansKannadaUI-Regular.ttf  
  inflating: NotoSansKayahLi-Regular.ttf  
  inflating: NotoSansKharoshthi-Regular.ttf  
  inflating: NotoSansKhmer-Black.ttf  
  inflating: NotoSansKhmer-Bold.ttf  
  inflating: NotoSansKhmer-Condensed.ttf  
  inflating: NotoSansKhmer-CondensedBlack.ttf  
  inflating: NotoSansKhmer-CondensedBold.ttf  
  inflating: NotoSansKhmer-CondensedExtraBold.ttf  
  inflating: NotoSansKhmer-CondensedExtraLight.ttf  
  inflating: NotoSansKhmer-CondensedLight.ttf  
  inflating: NotoSansKhmer-CondensedMedium.ttf  
  inflating: NotoSansKhmer-CondensedSemiBold.ttf  
  inflating: NotoSansKhmer-CondensedThin.ttf  
  inflating: NotoSansKhmer-ExtraBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensed.ttf  
  inflating: NotoSansKhmer-ExtraCondensedBlack.ttf  
  inflating: NotoSansKhmer-ExtraCondensedBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansKhmer-ExtraCondensedLight.ttf  
  inflating: NotoSansKhmer-ExtraCondensedMedium.ttf  
  inflating: NotoSansKhmer-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansKhmer-ExtraCondensedThin.ttf  
  inflating: NotoSansKhmer-ExtraLight.ttf  
  inflating: NotoSansKhmer-Light.ttf  
  inflating: NotoSansKhmer-Medium.ttf  
  inflating: NotoSansKhmer-Regular.ttf  
  inflating: NotoSansKhmer-SemiBold.ttf  
  inflating: NotoSansKhmer-SemiCondensed.ttf  
  inflating: NotoSansKhmer-SemiCondensedBlack.ttf  
  inflating: NotoSansKhmer-SemiCondensedBold.ttf  
  inflating: NotoSansKhmer-SemiCondensedExtraBold.ttf  
  inflating: NotoSansKhmer-SemiCondensedExtraLight.ttf  
  inflating: NotoSansKhmer-SemiCondensedLight.ttf  
  inflating: NotoSansKhmer-SemiCondensedMedium.ttf  
  inflating: NotoSansKhmer-SemiCondensedSemiBold.ttf  
  inflating: NotoSansKhmer-SemiCondensedThin.ttf  
  inflating: NotoSansKhmer-Thin.ttf  
  inflating: NotoSansKhmerUI-Black.ttf  
  inflating: NotoSansKhmerUI-Bold.ttf  
  inflating: NotoSansKhmerUI-Condensed.ttf  
  inflating: NotoSansKhmerUI-CondensedBlack.ttf  
  inflating: NotoSansKhmerUI-CondensedBold.ttf  
  inflating: NotoSansKhmerUI-CondensedExtraBold.ttf  
  inflating: NotoSansKhmerUI-CondensedExtraLight.ttf  
  inflating: NotoSansKhmerUI-CondensedLight.ttf  
  inflating: NotoSansKhmerUI-CondensedMedium.ttf  
  inflating: NotoSansKhmerUI-CondensedSemiBold.ttf  
  inflating: NotoSansKhmerUI-CondensedThin.ttf  
  inflating: NotoSansKhmerUI-ExtraBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensed.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedLight.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansKhmerUI-ExtraCondensedThin.ttf  
  inflating: NotoSansKhmerUI-ExtraLight.ttf  
  inflating: NotoSansKhmerUI-Light.ttf  
  inflating: NotoSansKhmerUI-Medium.ttf  
  inflating: NotoSansKhmerUI-Regular.ttf  
  inflating: NotoSansKhmerUI-SemiBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensed.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedBlack.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedLight.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedMedium.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansKhmerUI-SemiCondensedThin.ttf  
  inflating: NotoSansKhmerUI-Thin.ttf  
  inflating: NotoSansLao-Black.ttf   
  inflating: NotoSansLao-Bold.ttf    
  inflating: NotoSansLao-Condensed.ttf  
  inflating: NotoSansLao-CondensedBlack.ttf  
  inflating: NotoSansLao-CondensedBold.ttf  
  inflating: NotoSansLao-CondensedExtraBold.ttf  
  inflating: NotoSansLao-CondensedExtraLight.ttf  
  inflating: NotoSansLao-CondensedLight.ttf  
  inflating: NotoSansLao-CondensedMedium.ttf  
  inflating: NotoSansLao-CondensedSemiBold.ttf  
  inflating: NotoSansLao-CondensedThin.ttf  
  inflating: NotoSansLao-ExtraBold.ttf  
  inflating: NotoSansLao-ExtraCondensed.ttf  
  inflating: NotoSansLao-ExtraCondensedBlack.ttf  
  inflating: NotoSansLao-ExtraCondensedBold.ttf  
  inflating: NotoSansLao-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansLao-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansLao-ExtraCondensedLight.ttf  
  inflating: NotoSansLao-ExtraCondensedMedium.ttf  
  inflating: NotoSansLao-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansLao-ExtraCondensedThin.ttf  
  inflating: NotoSansLao-ExtraLight.ttf  
  inflating: NotoSansLao-Light.ttf   
  inflating: NotoSansLao-Medium.ttf  
  inflating: NotoSansLao-Regular.ttf  
  inflating: NotoSansLao-SemiBold.ttf  
  inflating: NotoSansLao-SemiCondensed.ttf  
  inflating: NotoSansLao-SemiCondensedBlack.ttf  
  inflating: NotoSansLao-SemiCondensedBold.ttf  
  inflating: NotoSansLao-SemiCondensedExtraBold.ttf  
  inflating: NotoSansLao-SemiCondensedExtraLight.ttf  
  inflating: NotoSansLao-SemiCondensedLight.ttf  
  inflating: NotoSansLao-SemiCondensedMedium.ttf  
  inflating: NotoSansLao-SemiCondensedSemiBold.ttf  
  inflating: NotoSansLao-SemiCondensedThin.ttf  
  inflating: NotoSansLao-Thin.ttf    
  inflating: NotoSansLaoUI-Black.ttf  
  inflating: NotoSansLaoUI-Bold.ttf  
  inflating: NotoSansLaoUI-Condensed.ttf  
  inflating: NotoSansLaoUI-CondensedBlack.ttf  
  inflating: NotoSansLaoUI-CondensedBold.ttf  
  inflating: NotoSansLaoUI-CondensedExtraBold.ttf  
  inflating: NotoSansLaoUI-CondensedExtraLight.ttf  
  inflating: NotoSansLaoUI-CondensedLight.ttf  
  inflating: NotoSansLaoUI-CondensedMedium.ttf  
  inflating: NotoSansLaoUI-CondensedSemiBold.ttf  
  inflating: NotoSansLaoUI-CondensedThin.ttf  
  inflating: NotoSansLaoUI-ExtraBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensed.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedLight.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansLaoUI-ExtraCondensedThin.ttf  
  inflating: NotoSansLaoUI-ExtraLight.ttf  
  inflating: NotoSansLaoUI-Light.ttf  
  inflating: NotoSansLaoUI-Medium.ttf  
  inflating: NotoSansLaoUI-Regular.ttf  
  inflating: NotoSansLaoUI-SemiBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensed.ttf  
  inflating: NotoSansLaoUI-SemiCondensedBlack.ttf  
  inflating: NotoSansLaoUI-SemiCondensedBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansLaoUI-SemiCondensedLight.ttf  
  inflating: NotoSansLaoUI-SemiCondensedMedium.ttf  
  inflating: NotoSansLaoUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansLaoUI-SemiCondensedThin.ttf  
  inflating: NotoSansLaoUI-Thin.ttf  
  inflating: NotoSansLepcha-Regular.ttf  
  inflating: NotoSansLimbu-Regular.ttf  
  inflating: NotoSansLinearB-Regular.ttf  
  inflating: NotoSansLisu-Regular.ttf  
  inflating: NotoSansLycian-Regular.ttf  
  inflating: NotoSansLydian-Regular.ttf  
  inflating: NotoSansMalayalam-Bold.ttf  
  inflating: NotoSansMalayalam-Regular.ttf  
  inflating: NotoSansMalayalamUI-Bold.ttf  
  inflating: NotoSansMalayalamUI-Regular.ttf  
  inflating: NotoSansMandaic-Regular.ttf  
  inflating: NotoSansMeeteiMayek-Regular.ttf  
  inflating: NotoSansMongolian-Regular.ttf  
  inflating: NotoSansMono-Black.ttf  
  inflating: NotoSansMono-Bold.ttf   
  inflating: NotoSansMono-Condensed.ttf  
  inflating: NotoSansMono-CondensedBlack.ttf  
  inflating: NotoSansMono-CondensedBold.ttf  
  inflating: NotoSansMono-CondensedExtraBold.ttf  
  inflating: NotoSansMono-CondensedExtraLight.ttf  
  inflating: NotoSansMono-CondensedLight.ttf  
  inflating: NotoSansMono-CondensedMedium.ttf  
  inflating: NotoSansMono-CondensedSemiBold.ttf  
  inflating: NotoSansMono-CondensedThin.ttf  
  inflating: NotoSansMono-ExtraBold.ttf  
  inflating: NotoSansMono-ExtraCondensed.ttf  
  inflating: NotoSansMono-ExtraCondensedBlack.ttf  
  inflating: NotoSansMono-ExtraCondensedBold.ttf  
  inflating: NotoSansMono-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansMono-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansMono-ExtraCondensedLight.ttf  
  inflating: NotoSansMono-ExtraCondensedMedium.ttf  
  inflating: NotoSansMono-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansMono-ExtraCondensedThin.ttf  
  inflating: NotoSansMono-ExtraLight.ttf  
  inflating: NotoSansMono-Light.ttf  
  inflating: NotoSansMono-Medium.ttf  
  inflating: NotoSansMono-Regular.ttf  
  inflating: NotoSansMono-SemiBold.ttf  
  inflating: NotoSansMono-SemiCondensed.ttf  
  inflating: NotoSansMono-SemiCondensedBlack.ttf  
  inflating: NotoSansMono-SemiCondensedBold.ttf  
  inflating: NotoSansMono-SemiCondensedExtraBold.ttf  
  inflating: NotoSansMono-SemiCondensedExtraLight.ttf  
  inflating: NotoSansMono-SemiCondensedLight.ttf  
  inflating: NotoSansMono-SemiCondensedMedium.ttf  
  inflating: NotoSansMono-SemiCondensedSemiBold.ttf  
  inflating: NotoSansMono-SemiCondensedThin.ttf  
  inflating: NotoSansMono-Thin.ttf   
  inflating: NotoSansMonoCJKjp-Bold.otf  
  inflating: NotoSansMonoCJKjp-Regular.otf  
  inflating: NotoSansMonoCJKkr-Bold.otf  
  inflating: NotoSansMonoCJKkr-Regular.otf  
  inflating: NotoSansMonoCJKsc-Bold.otf  
  inflating: NotoSansMonoCJKsc-Regular.otf  
  inflating: NotoSansMonoCJKtc-Bold.otf  
  inflating: NotoSansMonoCJKtc-Regular.otf  
  inflating: NotoSansMyanmar-Black.ttf  
  inflating: NotoSansMyanmar-Bold.ttf  
  inflating: NotoSansMyanmar-Condensed.ttf  
  inflating: NotoSansMyanmar-CondensedBlack.ttf  
  inflating: NotoSansMyanmar-CondensedBold.ttf  
  inflating: NotoSansMyanmar-CondensedExtraBold.ttf  
  inflating: NotoSansMyanmar-CondensedExtraLight.ttf  
  inflating: NotoSansMyanmar-CondensedLight.ttf  
  inflating: NotoSansMyanmar-CondensedMedium.ttf  
  inflating: NotoSansMyanmar-CondensedSemiBold.ttf  
  inflating: NotoSansMyanmar-CondensedThin.ttf  
  inflating: NotoSansMyanmar-ExtraBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensed.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedBlack.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedLight.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedMedium.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansMyanmar-ExtraCondensedThin.ttf  
  inflating: NotoSansMyanmar-ExtraLight.ttf  
  inflating: NotoSansMyanmar-Light.ttf  
  inflating: NotoSansMyanmar-Medium.ttf  
  inflating: NotoSansMyanmar-Regular.ttf  
  inflating: NotoSansMyanmar-SemiBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensed.ttf  
  inflating: NotoSansMyanmar-SemiCondensedBlack.ttf  
  inflating: NotoSansMyanmar-SemiCondensedBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensedExtraBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensedExtraLight.ttf  
  inflating: NotoSansMyanmar-SemiCondensedLight.ttf  
  inflating: NotoSansMyanmar-SemiCondensedMedium.ttf  
  inflating: NotoSansMyanmar-SemiCondensedSemiBold.ttf  
  inflating: NotoSansMyanmar-SemiCondensedThin.ttf  
  inflating: NotoSansMyanmar-Thin.ttf  
  inflating: NotoSansMyanmarUI-Black.ttf  
  inflating: NotoSansMyanmarUI-Bold.ttf  
  inflating: NotoSansMyanmarUI-Condensed.ttf  
  inflating: NotoSansMyanmarUI-CondensedBlack.ttf  
  inflating: NotoSansMyanmarUI-CondensedBold.ttf  
  inflating: NotoSansMyanmarUI-CondensedExtraBold.ttf  
  inflating: NotoSansMyanmarUI-CondensedExtraLight.ttf  
  inflating: NotoSansMyanmarUI-CondensedLight.ttf  
  inflating: NotoSansMyanmarUI-CondensedMedium.ttf  
  inflating: NotoSansMyanmarUI-CondensedSemiBold.ttf  
  inflating: NotoSansMyanmarUI-CondensedThin.ttf  
  inflating: NotoSansMyanmarUI-ExtraBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensed.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedLight.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansMyanmarUI-ExtraCondensedThin.ttf  
  inflating: NotoSansMyanmarUI-ExtraLight.ttf  
  inflating: NotoSansMyanmarUI-Light.ttf  
  inflating: NotoSansMyanmarUI-Medium.ttf  
  inflating: NotoSansMyanmarUI-Regular.ttf  
  inflating: NotoSansMyanmarUI-SemiBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensed.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedBlack.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedLight.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedMedium.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansMyanmarUI-SemiCondensedThin.ttf  
  inflating: NotoSansMyanmarUI-Thin.ttf  
  inflating: NotoSansNKo-Regular.ttf  
  inflating: NotoSansNewTaiLue-Regular.ttf  
  inflating: NotoSansOgham-Regular.ttf  
  inflating: NotoSansOlChiki-Regular.ttf  
  inflating: NotoSansOldItalic-Regular.ttf  
  inflating: NotoSansOldPersian-Regular.ttf  
  inflating: NotoSansOldSouthArabian-Regular.ttf  
  inflating: NotoSansOldTurkic-Regular.ttf  
  inflating: NotoSansOriya-Bold.ttf  
  inflating: NotoSansOriya-Regular.ttf  
  inflating: NotoSansOriyaUI-Bold.ttf  
  inflating: NotoSansOriyaUI-Regular.ttf  
  inflating: NotoSansOsage-Regular.ttf  
  inflating: NotoSansOsmanya-Regular.ttf  
  inflating: NotoSansPhagsPa-Regular.ttf  
  inflating: NotoSansPhoenician-Regular.ttf  
  inflating: NotoSansRejang-Regular.ttf  
  inflating: NotoSansRunic-Regular.ttf  
  inflating: NotoSansSamaritan-Regular.ttf  
  inflating: NotoSansSaurashtra-Regular.ttf  
  inflating: NotoSansShavian-Regular.ttf  
  inflating: NotoSansSinhala-Black.ttf  
  inflating: NotoSansSinhala-Bold.ttf  
  inflating: NotoSansSinhala-Condensed.ttf  
  inflating: NotoSansSinhala-CondensedBlack.ttf  
  inflating: NotoSansSinhala-CondensedBold.ttf  
  inflating: NotoSansSinhala-CondensedExtraBold.ttf  
  inflating: NotoSansSinhala-CondensedExtraLight.ttf  
  inflating: NotoSansSinhala-CondensedLight.ttf  
  inflating: NotoSansSinhala-CondensedMedium.ttf  
  inflating: NotoSansSinhala-CondensedSemiBold.ttf  
  inflating: NotoSansSinhala-CondensedThin.ttf  
  inflating: NotoSansSinhala-ExtraBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensed.ttf  
  inflating: NotoSansSinhala-ExtraCondensedBlack.ttf  
  inflating: NotoSansSinhala-ExtraCondensedBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansSinhala-ExtraCondensedLight.ttf  
  inflating: NotoSansSinhala-ExtraCondensedMedium.ttf  
  inflating: NotoSansSinhala-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansSinhala-ExtraCondensedThin.ttf  
  inflating: NotoSansSinhala-ExtraLight.ttf  
  inflating: NotoSansSinhala-Light.ttf  
  inflating: NotoSansSinhala-Medium.ttf  
  inflating: NotoSansSinhala-Regular.ttf  
  inflating: NotoSansSinhala-SemiBold.ttf  
  inflating: NotoSansSinhala-SemiCondensed.ttf  
  inflating: NotoSansSinhala-SemiCondensedBlack.ttf  
  inflating: NotoSansSinhala-SemiCondensedBold.ttf  
  inflating: NotoSansSinhala-SemiCondensedExtraBold.ttf  
  inflating: NotoSansSinhala-SemiCondensedExtraLight.ttf  
  inflating: NotoSansSinhala-SemiCondensedLight.ttf  
  inflating: NotoSansSinhala-SemiCondensedMedium.ttf  
  inflating: NotoSansSinhala-SemiCondensedSemiBold.ttf  
  inflating: NotoSansSinhala-SemiCondensedThin.ttf  
  inflating: NotoSansSinhala-Thin.ttf  
  inflating: NotoSansSinhalaUI-Black.ttf  
  inflating: NotoSansSinhalaUI-Bold.ttf  
  inflating: NotoSansSinhalaUI-Condensed.ttf  
  inflating: NotoSansSinhalaUI-CondensedBlack.ttf  
  inflating: NotoSansSinhalaUI-CondensedBold.ttf  
  inflating: NotoSansSinhalaUI-CondensedExtraBold.ttf  
  inflating: NotoSansSinhalaUI-CondensedExtraLight.ttf  
  inflating: NotoSansSinhalaUI-CondensedLight.ttf  
  inflating: NotoSansSinhalaUI-CondensedMedium.ttf  
  inflating: NotoSansSinhalaUI-CondensedSemiBold.ttf  
  inflating: NotoSansSinhalaUI-CondensedThin.ttf  
  inflating: NotoSansSinhalaUI-ExtraBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensed.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedLight.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansSinhalaUI-ExtraCondensedThin.ttf  
  inflating: NotoSansSinhalaUI-ExtraLight.ttf  
  inflating: NotoSansSinhalaUI-Light.ttf  
  inflating: NotoSansSinhalaUI-Medium.ttf  
  inflating: NotoSansSinhalaUI-Regular.ttf  
  inflating: NotoSansSinhalaUI-SemiBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensed.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedBlack.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedLight.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedMedium.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansSinhalaUI-SemiCondensedThin.ttf  
  inflating: NotoSansSinhalaUI-Thin.ttf  
  inflating: NotoSansSundanese-Regular.ttf  
  inflating: NotoSansSylotiNagri-Regular.ttf  
  inflating: NotoSansSymbols-Black.ttf  
  inflating: NotoSansSymbols-Bold.ttf  
  inflating: NotoSansSymbols-ExtraBold.ttf  
  inflating: NotoSansSymbols-ExtraLight.ttf  
  inflating: NotoSansSymbols-Light.ttf  
  inflating: NotoSansSymbols-Medium.ttf  
  inflating: NotoSansSymbols-Regular.ttf  
  inflating: NotoSansSymbols-SemiBold.ttf  
  inflating: NotoSansSymbols-Thin.ttf  
  inflating: NotoSansSymbols2-Regular.ttf  
  inflating: NotoSansSyriacEastern-Regular.ttf  
  inflating: NotoSansSyriacEstrangela-Regular.ttf  
  inflating: NotoSansSyriacWestern-Regular.ttf  
  inflating: NotoSansTagalog-Regular.ttf  
  inflating: NotoSansTagbanwa-Regular.ttf  
  inflating: NotoSansTaiLe-Regular.ttf  
  inflating: NotoSansTaiTham-Regular.ttf  
  inflating: NotoSansTaiViet-Regular.ttf  
  inflating: NotoSansTamil-Black.ttf  
  inflating: NotoSansTamil-Bold.ttf  
  inflating: NotoSansTamil-Condensed.ttf  
  inflating: NotoSansTamil-CondensedBlack.ttf  
  inflating: NotoSansTamil-CondensedBold.ttf  
  inflating: NotoSansTamil-CondensedExtraBold.ttf  
  inflating: NotoSansTamil-CondensedExtraLight.ttf  
  inflating: NotoSansTamil-CondensedLight.ttf  
  inflating: NotoSansTamil-CondensedMedium.ttf  
  inflating: NotoSansTamil-CondensedSemiBold.ttf  
  inflating: NotoSansTamil-CondensedThin.ttf  
  inflating: NotoSansTamil-ExtraBold.ttf  
  inflating: NotoSansTamil-ExtraCondensed.ttf  
  inflating: NotoSansTamil-ExtraCondensedBlack.ttf  
  inflating: NotoSansTamil-ExtraCondensedBold.ttf  
  inflating: NotoSansTamil-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansTamil-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansTamil-ExtraCondensedLight.ttf  
  inflating: NotoSansTamil-ExtraCondensedMedium.ttf  
  inflating: NotoSansTamil-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansTamil-ExtraCondensedThin.ttf  
  inflating: NotoSansTamil-ExtraLight.ttf  
  inflating: NotoSansTamil-Light.ttf  
  inflating: NotoSansTamil-Medium.ttf  
  inflating: NotoSansTamil-Regular.ttf  
  inflating: NotoSansTamil-SemiBold.ttf  
  inflating: NotoSansTamil-SemiCondensed.ttf  
  inflating: NotoSansTamil-SemiCondensedBlack.ttf  
  inflating: NotoSansTamil-SemiCondensedBold.ttf  
  inflating: NotoSansTamil-SemiCondensedExtraBold.ttf  
  inflating: NotoSansTamil-SemiCondensedExtraLight.ttf  
  inflating: NotoSansTamil-SemiCondensedLight.ttf  
  inflating: NotoSansTamil-SemiCondensedMedium.ttf  
  inflating: NotoSansTamil-SemiCondensedSemiBold.ttf  
  inflating: NotoSansTamil-SemiCondensedThin.ttf  
  inflating: NotoSansTamil-Thin.ttf  
  inflating: NotoSansTamilUI-Black.ttf  
  inflating: NotoSansTamilUI-Bold.ttf  
  inflating: NotoSansTamilUI-Condensed.ttf  
  inflating: NotoSansTamilUI-CondensedBlack.ttf  
  inflating: NotoSansTamilUI-CondensedBold.ttf  
  inflating: NotoSansTamilUI-CondensedExtraBold.ttf  
  inflating: NotoSansTamilUI-CondensedExtraLight.ttf  
  inflating: NotoSansTamilUI-CondensedLight.ttf  
  inflating: NotoSansTamilUI-CondensedMedium.ttf  
  inflating: NotoSansTamilUI-CondensedSemiBold.ttf  
  inflating: NotoSansTamilUI-CondensedThin.ttf  
  inflating: NotoSansTamilUI-ExtraBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensed.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedLight.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansTamilUI-ExtraCondensedThin.ttf  
  inflating: NotoSansTamilUI-ExtraLight.ttf  
  inflating: NotoSansTamilUI-Light.ttf  
  inflating: NotoSansTamilUI-Medium.ttf  
  inflating: NotoSansTamilUI-Regular.ttf  
  inflating: NotoSansTamilUI-SemiBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensed.ttf  
  inflating: NotoSansTamilUI-SemiCondensedBlack.ttf  
  inflating: NotoSansTamilUI-SemiCondensedBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansTamilUI-SemiCondensedLight.ttf  
  inflating: NotoSansTamilUI-SemiCondensedMedium.ttf  
  inflating: NotoSansTamilUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansTamilUI-SemiCondensedThin.ttf  
  inflating: NotoSansTamilUI-Thin.ttf  
  inflating: NotoSansTelugu-Bold.ttf  
  inflating: NotoSansTelugu-Regular.ttf  
  inflating: NotoSansTeluguUI-Bold.ttf  
  inflating: NotoSansTeluguUI-Regular.ttf  
  inflating: NotoSansThaana-Bold.ttf  
  inflating: NotoSansThaana-Regular.ttf  
  inflating: NotoSansThai-Black.ttf  
  inflating: NotoSansThai-Bold.ttf   
  inflating: NotoSansThai-Condensed.ttf  
  inflating: NotoSansThai-CondensedBlack.ttf  
  inflating: NotoSansThai-CondensedBold.ttf  
  inflating: NotoSansThai-CondensedExtraBold.ttf  
  inflating: NotoSansThai-CondensedExtraLight.ttf  
  inflating: NotoSansThai-CondensedLight.ttf  
  inflating: NotoSansThai-CondensedMedium.ttf  
  inflating: NotoSansThai-CondensedSemiBold.ttf  
  inflating: NotoSansThai-CondensedThin.ttf  
  inflating: NotoSansThai-ExtraBold.ttf  
  inflating: NotoSansThai-ExtraCondensed.ttf  
  inflating: NotoSansThai-ExtraCondensedBlack.ttf  
  inflating: NotoSansThai-ExtraCondensedBold.ttf  
  inflating: NotoSansThai-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansThai-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansThai-ExtraCondensedLight.ttf  
  inflating: NotoSansThai-ExtraCondensedMedium.ttf  
  inflating: NotoSansThai-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansThai-ExtraCondensedThin.ttf  
  inflating: NotoSansThai-ExtraLight.ttf  
  inflating: NotoSansThai-Light.ttf  
  inflating: NotoSansThai-Medium.ttf  
  inflating: NotoSansThai-Regular.ttf  
  inflating: NotoSansThai-SemiBold.ttf  
  inflating: NotoSansThai-SemiCondensed.ttf  
  inflating: NotoSansThai-SemiCondensedBlack.ttf  
  inflating: NotoSansThai-SemiCondensedBold.ttf  
  inflating: NotoSansThai-SemiCondensedExtraBold.ttf  
  inflating: NotoSansThai-SemiCondensedExtraLight.ttf  
  inflating: NotoSansThai-SemiCondensedLight.ttf  
  inflating: NotoSansThai-SemiCondensedMedium.ttf  
  inflating: NotoSansThai-SemiCondensedSemiBold.ttf  
  inflating: NotoSansThai-SemiCondensedThin.ttf  
  inflating: NotoSansThai-Thin.ttf   
  inflating: NotoSansThaiUI-Black.ttf  
  inflating: NotoSansThaiUI-Bold.ttf  
  inflating: NotoSansThaiUI-Condensed.ttf  
  inflating: NotoSansThaiUI-CondensedBlack.ttf  
  inflating: NotoSansThaiUI-CondensedBold.ttf  
  inflating: NotoSansThaiUI-CondensedExtraBold.ttf  
  inflating: NotoSansThaiUI-CondensedExtraLight.ttf  
  inflating: NotoSansThaiUI-CondensedLight.ttf  
  inflating: NotoSansThaiUI-CondensedMedium.ttf  
  inflating: NotoSansThaiUI-CondensedSemiBold.ttf  
  inflating: NotoSansThaiUI-CondensedThin.ttf  
  inflating: NotoSansThaiUI-ExtraBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensed.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedBlack.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedExtraBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedExtraLight.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedLight.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedMedium.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedSemiBold.ttf  
  inflating: NotoSansThaiUI-ExtraCondensedThin.ttf  
  inflating: NotoSansThaiUI-ExtraLight.ttf  
  inflating: NotoSansThaiUI-Light.ttf  
  inflating: NotoSansThaiUI-Medium.ttf  
  inflating: NotoSansThaiUI-Regular.ttf  
  inflating: NotoSansThaiUI-SemiBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensed.ttf  
  inflating: NotoSansThaiUI-SemiCondensedBlack.ttf  
  inflating: NotoSansThaiUI-SemiCondensedBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensedExtraBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensedExtraLight.ttf  
  inflating: NotoSansThaiUI-SemiCondensedLight.ttf  
  inflating: NotoSansThaiUI-SemiCondensedMedium.ttf  
  inflating: NotoSansThaiUI-SemiCondensedSemiBold.ttf  
  inflating: NotoSansThaiUI-SemiCondensedThin.ttf  
  inflating: NotoSansThaiUI-Thin.ttf  
  inflating: NotoSansTibetan-Bold.ttf  
  inflating: NotoSansTibetan-Regular.ttf  
  inflating: NotoSansTifinagh-Regular.ttf  
  inflating: NotoSansUgaritic-Regular.ttf  
  inflating: NotoSansVai-Regular.ttf  
  inflating: NotoSansYi-Regular.ttf  
  inflating: NotoSerif-Black.ttf     
  inflating: NotoSerif-BlackItalic.ttf  
  inflating: NotoSerif-Bold.ttf      
  inflating: NotoSerif-BoldItalic.ttf  
  inflating: NotoSerif-Condensed.ttf  
  inflating: NotoSerif-CondensedBlack.ttf  
  inflating: NotoSerif-CondensedBlackItalic.ttf  
  inflating: NotoSerif-CondensedBold.ttf  
  inflating: NotoSerif-CondensedBoldItalic.ttf  
  inflating: NotoSerif-CondensedExtraBold.ttf  
  inflating: NotoSerif-CondensedExtraBoldItalic.ttf  
  inflating: NotoSerif-CondensedExtraLight.ttf  
  inflating: NotoSerif-CondensedExtraLightItalic.ttf  
  inflating: NotoSerif-CondensedItalic.ttf  
  inflating: NotoSerif-CondensedLight.ttf  
  inflating: NotoSerif-CondensedLightItalic.ttf  
  inflating: NotoSerif-CondensedMedium.ttf  
  inflating: NotoSerif-CondensedMediumItalic.ttf  
  inflating: NotoSerif-CondensedSemiBold.ttf  
  inflating: NotoSerif-CondensedSemiBoldItalic.ttf  
  inflating: NotoSerif-CondensedThin.ttf  
  inflating: NotoSerif-CondensedThinItalic.ttf  
  inflating: NotoSerif-ExtraBold.ttf  
  inflating: NotoSerif-ExtraBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensed.ttf  
  inflating: NotoSerif-ExtraCondensedBlack.ttf  
  inflating: NotoSerif-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSerif-ExtraCondensedBold.ttf  
  inflating: NotoSerif-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerif-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerif-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSerif-ExtraCondensedItalic.ttf  
  inflating: NotoSerif-ExtraCondensedLight.ttf  
  inflating: NotoSerif-ExtraCondensedLightItalic.ttf  
  inflating: NotoSerif-ExtraCondensedMedium.ttf  
  inflating: NotoSerif-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSerif-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerif-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSerif-ExtraCondensedThin.ttf  
  inflating: NotoSerif-ExtraCondensedThinItalic.ttf  
  inflating: NotoSerif-ExtraLight.ttf  
  inflating: NotoSerif-ExtraLightItalic.ttf  
  inflating: NotoSerif-Italic.ttf    
  inflating: NotoSerif-Light.ttf     
  inflating: NotoSerif-LightItalic.ttf  
  inflating: NotoSerif-Medium.ttf    
  inflating: NotoSerif-MediumItalic.ttf  
  inflating: NotoSerif-Regular.ttf   
  inflating: NotoSerif-SemiBold.ttf  
  inflating: NotoSerif-SemiBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensed.ttf  
  inflating: NotoSerif-SemiCondensedBlack.ttf  
  inflating: NotoSerif-SemiCondensedBlackItalic.ttf  
  inflating: NotoSerif-SemiCondensedBold.ttf  
  inflating: NotoSerif-SemiCondensedBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensedExtraBold.ttf  
  inflating: NotoSerif-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensedExtraLight.ttf  
  inflating: NotoSerif-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSerif-SemiCondensedItalic.ttf  
  inflating: NotoSerif-SemiCondensedLight.ttf  
  inflating: NotoSerif-SemiCondensedLightItalic.ttf  
  inflating: NotoSerif-SemiCondensedMedium.ttf  
  inflating: NotoSerif-SemiCondensedMediumItalic.ttf  
  inflating: NotoSerif-SemiCondensedSemiBold.ttf  
  inflating: NotoSerif-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSerif-SemiCondensedThin.ttf  
  inflating: NotoSerif-SemiCondensedThinItalic.ttf  
  inflating: NotoSerif-Thin.ttf      
  inflating: NotoSerif-ThinItalic.ttf  
  inflating: NotoSerifArmenian-Black.ttf  
  inflating: NotoSerifArmenian-Bold.ttf  
  inflating: NotoSerifArmenian-Condensed.ttf  
  inflating: NotoSerifArmenian-CondensedBlack.ttf  
  inflating: NotoSerifArmenian-CondensedBold.ttf  
  inflating: NotoSerifArmenian-CondensedExtraBold.ttf  
  inflating: NotoSerifArmenian-CondensedExtraLight.ttf  
  inflating: NotoSerifArmenian-CondensedLight.ttf  
  inflating: NotoSerifArmenian-CondensedMedium.ttf  
  inflating: NotoSerifArmenian-CondensedSemiBold.ttf  
  inflating: NotoSerifArmenian-CondensedThin.ttf  
  inflating: NotoSerifArmenian-ExtraBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensed.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedBlack.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedLight.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedMedium.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifArmenian-ExtraCondensedThin.ttf  
  inflating: NotoSerifArmenian-ExtraLight.ttf  
  inflating: NotoSerifArmenian-Light.ttf  
  inflating: NotoSerifArmenian-Medium.ttf  
  inflating: NotoSerifArmenian-Regular.ttf  
  inflating: NotoSerifArmenian-SemiBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensed.ttf  
  inflating: NotoSerifArmenian-SemiCondensedBlack.ttf  
  inflating: NotoSerifArmenian-SemiCondensedBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifArmenian-SemiCondensedLight.ttf  
  inflating: NotoSerifArmenian-SemiCondensedMedium.ttf  
  inflating: NotoSerifArmenian-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifArmenian-SemiCondensedThin.ttf  
  inflating: NotoSerifArmenian-Thin.ttf  
  inflating: NotoSerifBengali-Bold.ttf  
  inflating: NotoSerifBengali-Regular.ttf  
  inflating: NotoSerifCJKjp-Black.otf  
  inflating: NotoSerifCJKjp-Bold.otf  
  inflating: NotoSerifCJKjp-ExtraLight.otf  
  inflating: NotoSerifCJKjp-Light.otf  
  inflating: NotoSerifCJKjp-Medium.otf  
  inflating: NotoSerifCJKjp-Regular.otf  
  inflating: NotoSerifCJKjp-SemiBold.otf  
  inflating: NotoSerifCJKkr-Black.otf  
  inflating: NotoSerifCJKkr-Bold.otf  
  inflating: NotoSerifCJKkr-ExtraLight.otf  
  inflating: NotoSerifCJKkr-Light.otf  
  inflating: NotoSerifCJKkr-Medium.otf  
  inflating: NotoSerifCJKkr-Regular.otf  
  inflating: NotoSerifCJKkr-SemiBold.otf  
  inflating: NotoSerifCJKsc-Black.otf  
  inflating: NotoSerifCJKsc-Bold.otf  
  inflating: NotoSerifCJKsc-ExtraLight.otf  
  inflating: NotoSerifCJKsc-Light.otf  
  inflating: NotoSerifCJKsc-Medium.otf  
  inflating: NotoSerifCJKsc-Regular.otf  
  inflating: NotoSerifCJKsc-SemiBold.otf  
  inflating: NotoSerifCJKtc-Black.otf  
  inflating: NotoSerifCJKtc-Bold.otf  
  inflating: NotoSerifCJKtc-ExtraLight.otf  
  inflating: NotoSerifCJKtc-Light.otf  
  inflating: NotoSerifCJKtc-Medium.otf  
  inflating: NotoSerifCJKtc-Regular.otf  
  inflating: NotoSerifCJKtc-SemiBold.otf  
  inflating: NotoSerifDevanagari-Bold.ttf  
  inflating: NotoSerifDevanagari-Regular.ttf  
  inflating: NotoSerifDisplay-Black.ttf  
  inflating: NotoSerifDisplay-BlackItalic.ttf  
  inflating: NotoSerifDisplay-Bold.ttf  
  inflating: NotoSerifDisplay-BoldItalic.ttf  
  inflating: NotoSerifDisplay-Condensed.ttf  
  inflating: NotoSerifDisplay-CondensedBlack.ttf  
  inflating: NotoSerifDisplay-CondensedBlackItalic.ttf  
  inflating: NotoSerifDisplay-CondensedBold.ttf  
  inflating: NotoSerifDisplay-CondensedBoldItalic.ttf  
  inflating: NotoSerifDisplay-CondensedExtraBold.ttf  
  inflating: NotoSerifDisplay-CondensedExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-CondensedExtraLight.ttf  
  inflating: NotoSerifDisplay-CondensedExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-CondensedItalic.ttf  
  inflating: NotoSerifDisplay-CondensedLight.ttf  
  inflating: NotoSerifDisplay-CondensedLightItalic.ttf  
  inflating: NotoSerifDisplay-CondensedMedium.ttf  
  inflating: NotoSerifDisplay-CondensedMediumItalic.ttf  
  inflating: NotoSerifDisplay-CondensedSemiBold.ttf  
  inflating: NotoSerifDisplay-CondensedSemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-CondensedThin.ttf  
  inflating: NotoSerifDisplay-CondensedThinItalic.ttf  
  inflating: NotoSerifDisplay-ExtraBold.ttf  
  inflating: NotoSerifDisplay-ExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensed.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBlack.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBlackItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBold.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedLight.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedLightItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedMedium.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedMediumItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedSemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedThin.ttf  
  inflating: NotoSerifDisplay-ExtraCondensedThinItalic.ttf  
  inflating: NotoSerifDisplay-ExtraLight.ttf  
  inflating: NotoSerifDisplay-ExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-Italic.ttf  
  inflating: NotoSerifDisplay-Light.ttf  
  inflating: NotoSerifDisplay-LightItalic.ttf  
  inflating: NotoSerifDisplay-Medium.ttf  
  inflating: NotoSerifDisplay-MediumItalic.ttf  
  inflating: NotoSerifDisplay-Regular.ttf  
  inflating: NotoSerifDisplay-SemiBold.ttf  
  inflating: NotoSerifDisplay-SemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensed.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBlack.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBlackItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBold.ttf  
  inflating: NotoSerifDisplay-SemiCondensedBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifDisplay-SemiCondensedExtraLightItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedLight.ttf  
  inflating: NotoSerifDisplay-SemiCondensedLightItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedMedium.ttf  
  inflating: NotoSerifDisplay-SemiCondensedMediumItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifDisplay-SemiCondensedSemiBoldItalic.ttf  
  inflating: NotoSerifDisplay-SemiCondensedThin.ttf  
  inflating: NotoSerifDisplay-SemiCondensedThinItalic.ttf  
  inflating: NotoSerifDisplay-Thin.ttf  
  inflating: NotoSerifDisplay-ThinItalic.ttf  
  inflating: NotoSerifEthiopic-Black.ttf  
  inflating: NotoSerifEthiopic-Bold.ttf  
  inflating: NotoSerifEthiopic-Condensed.ttf  
  inflating: NotoSerifEthiopic-CondensedBlack.ttf  
  inflating: NotoSerifEthiopic-CondensedBold.ttf  
  inflating: NotoSerifEthiopic-CondensedExtraBold.ttf  
  inflating: NotoSerifEthiopic-CondensedExtraLight.ttf  
  inflating: NotoSerifEthiopic-CondensedLight.ttf  
  inflating: NotoSerifEthiopic-CondensedMedium.ttf  
  inflating: NotoSerifEthiopic-CondensedSemiBold.ttf  
  inflating: NotoSerifEthiopic-CondensedThin.ttf  
  inflating: NotoSerifEthiopic-ExtraBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensed.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedBlack.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedLight.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedMedium.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifEthiopic-ExtraCondensedThin.ttf  
  inflating: NotoSerifEthiopic-ExtraLight.ttf  
  inflating: NotoSerifEthiopic-Light.ttf  
  inflating: NotoSerifEthiopic-Medium.ttf  
  inflating: NotoSerifEthiopic-Regular.ttf  
  inflating: NotoSerifEthiopic-SemiBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensed.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedBlack.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedLight.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedMedium.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifEthiopic-SemiCondensedThin.ttf  
  inflating: NotoSerifEthiopic-Thin.ttf  
  inflating: NotoSerifGeorgian-Black.ttf  
  inflating: NotoSerifGeorgian-Bold.ttf  
  inflating: NotoSerifGeorgian-Condensed.ttf  
  inflating: NotoSerifGeorgian-CondensedBlack.ttf  
  inflating: NotoSerifGeorgian-CondensedBold.ttf  
  inflating: NotoSerifGeorgian-CondensedExtraBold.ttf  
  inflating: NotoSerifGeorgian-CondensedExtraLight.ttf  
  inflating: NotoSerifGeorgian-CondensedLight.ttf  
  inflating: NotoSerifGeorgian-CondensedMedium.ttf  
  inflating: NotoSerifGeorgian-CondensedSemiBold.ttf  
  inflating: NotoSerifGeorgian-CondensedThin.ttf  
  inflating: NotoSerifGeorgian-ExtraBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensed.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedBlack.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedLight.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedMedium.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifGeorgian-ExtraCondensedThin.ttf  
  inflating: NotoSerifGeorgian-ExtraLight.ttf  
  inflating: NotoSerifGeorgian-Light.ttf  
  inflating: NotoSerifGeorgian-Medium.ttf  
  inflating: NotoSerifGeorgian-Regular.ttf  
  inflating: NotoSerifGeorgian-SemiBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensed.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedBlack.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedLight.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedMedium.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifGeorgian-SemiCondensedThin.ttf  
  inflating: NotoSerifGeorgian-Thin.ttf  
  inflating: NotoSerifGujarati-Bold.ttf  
  inflating: NotoSerifGujarati-Regular.ttf  
  inflating: NotoSerifHebrew-Black.ttf  
  inflating: NotoSerifHebrew-Bold.ttf  
  inflating: NotoSerifHebrew-Condensed.ttf  
  inflating: NotoSerifHebrew-CondensedBlack.ttf  
  inflating: NotoSerifHebrew-CondensedBold.ttf  
  inflating: NotoSerifHebrew-CondensedExtraBold.ttf  
  inflating: NotoSerifHebrew-CondensedExtraLight.ttf  
  inflating: NotoSerifHebrew-CondensedLight.ttf  
  inflating: NotoSerifHebrew-CondensedMedium.ttf  
  inflating: NotoSerifHebrew-CondensedSemiBold.ttf  
  inflating: NotoSerifHebrew-CondensedThin.ttf  
  inflating: NotoSerifHebrew-ExtraBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensed.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedBlack.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedLight.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedMedium.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifHebrew-ExtraCondensedThin.ttf  
  inflating: NotoSerifHebrew-ExtraLight.ttf  
  inflating: NotoSerifHebrew-Light.ttf  
  inflating: NotoSerifHebrew-Medium.ttf  
  inflating: NotoSerifHebrew-Regular.ttf  
  inflating: NotoSerifHebrew-SemiBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensed.ttf  
  inflating: NotoSerifHebrew-SemiCondensedBlack.ttf  
  inflating: NotoSerifHebrew-SemiCondensedBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifHebrew-SemiCondensedLight.ttf  
  inflating: NotoSerifHebrew-SemiCondensedMedium.ttf  
  inflating: NotoSerifHebrew-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifHebrew-SemiCondensedThin.ttf  
  inflating: NotoSerifHebrew-Thin.ttf  
  inflating: NotoSerifKannada-Bold.ttf  
  inflating: NotoSerifKannada-Regular.ttf  
  inflating: NotoSerifKhmer-Black.ttf  
  inflating: NotoSerifKhmer-Bold.ttf  
  inflating: NotoSerifKhmer-Condensed.ttf  
  inflating: NotoSerifKhmer-CondensedBlack.ttf  
  inflating: NotoSerifKhmer-CondensedBold.ttf  
  inflating: NotoSerifKhmer-CondensedExtraBold.ttf  
  inflating: NotoSerifKhmer-CondensedExtraLight.ttf  
  inflating: NotoSerifKhmer-CondensedLight.ttf  
  inflating: NotoSerifKhmer-CondensedMedium.ttf  
  inflating: NotoSerifKhmer-CondensedSemiBold.ttf  
  inflating: NotoSerifKhmer-CondensedThin.ttf  
  inflating: NotoSerifKhmer-ExtraBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensed.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedBlack.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedLight.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedMedium.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifKhmer-ExtraCondensedThin.ttf  
  inflating: NotoSerifKhmer-ExtraLight.ttf  
  inflating: NotoSerifKhmer-Light.ttf  
  inflating: NotoSerifKhmer-Medium.ttf  
  inflating: NotoSerifKhmer-Regular.ttf  
  inflating: NotoSerifKhmer-SemiBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensed.ttf  
  inflating: NotoSerifKhmer-SemiCondensedBlack.ttf  
  inflating: NotoSerifKhmer-SemiCondensedBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifKhmer-SemiCondensedLight.ttf  
  inflating: NotoSerifKhmer-SemiCondensedMedium.ttf  
  inflating: NotoSerifKhmer-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifKhmer-SemiCondensedThin.ttf  
  inflating: NotoSerifKhmer-Thin.ttf  
  inflating: NotoSerifLao-Black.ttf  
  inflating: NotoSerifLao-Bold.ttf   
  inflating: NotoSerifLao-Condensed.ttf  
  inflating: NotoSerifLao-CondensedBlack.ttf  
  inflating: NotoSerifLao-CondensedBold.ttf  
  inflating: NotoSerifLao-CondensedExtraBold.ttf  
  inflating: NotoSerifLao-CondensedExtraLight.ttf  
  inflating: NotoSerifLao-CondensedLight.ttf  
  inflating: NotoSerifLao-CondensedMedium.ttf  
  inflating: NotoSerifLao-CondensedSemiBold.ttf  
  inflating: NotoSerifLao-CondensedThin.ttf  
  inflating: NotoSerifLao-ExtraBold.ttf  
  inflating: NotoSerifLao-ExtraCondensed.ttf  
  inflating: NotoSerifLao-ExtraCondensedBlack.ttf  
  inflating: NotoSerifLao-ExtraCondensedBold.ttf  
  inflating: NotoSerifLao-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifLao-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifLao-ExtraCondensedLight.ttf  
  inflating: NotoSerifLao-ExtraCondensedMedium.ttf  
  inflating: NotoSerifLao-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifLao-ExtraCondensedThin.ttf  
  inflating: NotoSerifLao-ExtraLight.ttf  
  inflating: NotoSerifLao-Light.ttf  
  inflating: NotoSerifLao-Medium.ttf  
  inflating: NotoSerifLao-Regular.ttf  
  inflating: NotoSerifLao-SemiBold.ttf  
  inflating: NotoSerifLao-SemiCondensed.ttf  
  inflating: NotoSerifLao-SemiCondensedBlack.ttf  
  inflating: NotoSerifLao-SemiCondensedBold.ttf  
  inflating: NotoSerifLao-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifLao-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifLao-SemiCondensedLight.ttf  
  inflating: NotoSerifLao-SemiCondensedMedium.ttf  
  inflating: NotoSerifLao-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifLao-SemiCondensedThin.ttf  
  inflating: NotoSerifLao-Thin.ttf   
  inflating: NotoSerifMalayalam-Bold.ttf  
  inflating: NotoSerifMalayalam-Regular.ttf  
  inflating: NotoSerifMyanmar-Black.ttf  
  inflating: NotoSerifMyanmar-Bold.ttf  
  inflating: NotoSerifMyanmar-Condensed.ttf  
  inflating: NotoSerifMyanmar-CondensedBlack.ttf  
  inflating: NotoSerifMyanmar-CondensedBold.ttf  
  inflating: NotoSerifMyanmar-CondensedExtraBold.ttf  
  inflating: NotoSerifMyanmar-CondensedExtraLight.ttf  
  inflating: NotoSerifMyanmar-CondensedLight.ttf  
  inflating: NotoSerifMyanmar-CondensedMedium.ttf  
  inflating: NotoSerifMyanmar-CondensedSemiBold.ttf  
  inflating: NotoSerifMyanmar-CondensedThin.ttf  
  inflating: NotoSerifMyanmar-ExtraBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensed.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedBlack.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedLight.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedMedium.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifMyanmar-ExtraCondensedThin.ttf  
  inflating: NotoSerifMyanmar-ExtraLight.ttf  
  inflating: NotoSerifMyanmar-Light.ttf  
  inflating: NotoSerifMyanmar-Medium.ttf  
  inflating: NotoSerifMyanmar-Regular.ttf  
  inflating: NotoSerifMyanmar-SemiBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensed.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedBlack.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedLight.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedMedium.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifMyanmar-SemiCondensedThin.ttf  
  inflating: NotoSerifMyanmar-Thin.ttf  
  inflating: NotoSerifSinhala-Black.ttf  
  inflating: NotoSerifSinhala-Bold.ttf  
  inflating: NotoSerifSinhala-ExtraBold.ttf  
  inflating: NotoSerifSinhala-ExtraLight.ttf  
  inflating: NotoSerifSinhala-Light.ttf  
  inflating: NotoSerifSinhala-Medium.ttf  
  inflating: NotoSerifSinhala-Regular.ttf  
  inflating: NotoSerifSinhala-SemiBold.ttf  
  inflating: NotoSerifSinhala-Thin.ttf  
  inflating: NotoSerifTamil-Black.ttf  
  inflating: NotoSerifTamil-Bold.ttf  
  inflating: NotoSerifTamil-Condensed.ttf  
  inflating: NotoSerifTamil-CondensedBlack.ttf  
  inflating: NotoSerifTamil-CondensedBold.ttf  
  inflating: NotoSerifTamil-CondensedExtraBold.ttf  
  inflating: NotoSerifTamil-CondensedExtraLight.ttf  
  inflating: NotoSerifTamil-CondensedLight.ttf  
  inflating: NotoSerifTamil-CondensedMedium.ttf  
  inflating: NotoSerifTamil-CondensedSemiBold.ttf  
  inflating: NotoSerifTamil-CondensedThin.ttf  
  inflating: NotoSerifTamil-ExtraBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensed.ttf  
  inflating: NotoSerifTamil-ExtraCondensedBlack.ttf  
  inflating: NotoSerifTamil-ExtraCondensedBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifTamil-ExtraCondensedLight.ttf  
  inflating: NotoSerifTamil-ExtraCondensedMedium.ttf  
  inflating: NotoSerifTamil-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifTamil-ExtraCondensedThin.ttf  
  inflating: NotoSerifTamil-ExtraLight.ttf  
  inflating: NotoSerifTamil-Light.ttf  
  inflating: NotoSerifTamil-Medium.ttf  
  inflating: NotoSerifTamil-Regular.ttf  
  inflating: NotoSerifTamil-SemiBold.ttf  
  inflating: NotoSerifTamil-SemiCondensed.ttf  
  inflating: NotoSerifTamil-SemiCondensedBlack.ttf  
  inflating: NotoSerifTamil-SemiCondensedBold.ttf  
  inflating: NotoSerifTamil-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifTamil-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifTamil-SemiCondensedLight.ttf  
  inflating: NotoSerifTamil-SemiCondensedMedium.ttf  
  inflating: NotoSerifTamil-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifTamil-SemiCondensedThin.ttf  
  inflating: NotoSerifTamil-Thin.ttf  
  inflating: NotoSerifTelugu-Bold.ttf  
  inflating: NotoSerifTelugu-Regular.ttf  
  inflating: NotoSerifThai-Black.ttf  
  inflating: NotoSerifThai-Bold.ttf  
  inflating: NotoSerifThai-Condensed.ttf  
  inflating: NotoSerifThai-CondensedBlack.ttf  
  inflating: NotoSerifThai-CondensedBold.ttf  
  inflating: NotoSerifThai-CondensedExtraBold.ttf  
  inflating: NotoSerifThai-CondensedExtraLight.ttf  
  inflating: NotoSerifThai-CondensedLight.ttf  
  inflating: NotoSerifThai-CondensedMedium.ttf  
  inflating: NotoSerifThai-CondensedSemiBold.ttf  
  inflating: NotoSerifThai-CondensedThin.ttf  
  inflating: NotoSerifThai-ExtraBold.ttf  
  inflating: NotoSerifThai-ExtraCondensed.ttf  
  inflating: NotoSerifThai-ExtraCondensedBlack.ttf  
  inflating: NotoSerifThai-ExtraCondensedBold.ttf  
  inflating: NotoSerifThai-ExtraCondensedExtraBold.ttf  
  inflating: NotoSerifThai-ExtraCondensedExtraLight.ttf  
  inflating: NotoSerifThai-ExtraCondensedLight.ttf  
  inflating: NotoSerifThai-ExtraCondensedMedium.ttf  
  inflating: NotoSerifThai-ExtraCondensedSemiBold.ttf  
  inflating: NotoSerifThai-ExtraCondensedThin.ttf  
  inflating: NotoSerifThai-ExtraLight.ttf  
  inflating: NotoSerifThai-Light.ttf  
  inflating: NotoSerifThai-Medium.ttf  
  inflating: NotoSerifThai-Regular.ttf  
  inflating: NotoSerifThai-SemiBold.ttf  
  inflating: NotoSerifThai-SemiCondensed.ttf  
  inflating: NotoSerifThai-SemiCondensedBlack.ttf  
  inflating: NotoSerifThai-SemiCondensedBold.ttf  
  inflating: NotoSerifThai-SemiCondensedExtraBold.ttf  
  inflating: NotoSerifThai-SemiCondensedExtraLight.ttf  
  inflating: NotoSerifThai-SemiCondensedLight.ttf  
  inflating: NotoSerifThai-SemiCondensedMedium.ttf  
  inflating: NotoSerifThai-SemiCondensedSemiBold.ttf  
  inflating: NotoSerifThai-SemiCondensedThin.ttf  
  inflating: NotoSerifThai-Thin.ttf  
  inflating: README                  

ターミナル設定変更

Noto Emoji Regular に変更するんだ

fmt_clr_cnst.sh

コード表示

[oracle@centos gg]$ cat fmt_clr_cnst.sh
#!/bin/bash
NORMAL=$(tput sgr0)
FG_RED=$(tput setaf 1)
FG_GREEN=$(tput setaf 2)
FG_YELLOW=$(tput setaf 3)
FG_BLUE=$(tput setaf 4)
FG_MAGENTA=$(tput setaf 5)
FG_CYAN=$(tput setaf 6)
FG_WHITE=$(tput setaf 7)

fmt_clr_func.sh

コード表示

[oracle@centos gg]$ cat fmt_clr_func.sh
#!/bin/bash
source ./fmt_clr_cnst.sh;
fg_red(){
  echo -e "${FG_RED}$*${NORMAL}";
}
fg_green(){
  echo -e "${FG_GREEN}$*${NORMAL}";
}
fg_yellow(){
  echo -e "${FG_YELLOW}$*${NORMAL}";
}
fg_blue(){
  echo -e "${FG_BLUE}$*${NORMAL}";
}
fg_magenta(){
  echo -e "${FG_MAGENTA}$*${NORMAL}";
}
fg_cyan(){
  echo -e "${FG_CYAN}$*${NORMAL}";
}
fg_white(){
  echo -e "${FG_WHITE}$*${NORMAL}";
}

fmt_deco_func.sh

中央揃えにしようとしたなごり。(してない。)

コード表示

[oracle@centos gg]$ cat fmt_deco_func.sh
#!/bin/bash

_lpd(){
  local PD=$1
  local STR=$2
  printf "|%${PD}s|\n" ${STR};
}

_rpd(){
  local PD=$1
  local STR=$2
  printf "|%-${PD}s|\n" ${STR};
}

_aln_ctr(){
  local PD=$1
  local STR=$2
  echo "" | awk '
  {
    PD="'${PD}'"
    STR="'${STR}'"
    printf "%" int(PD+length(STR)/2) "s\n",STR
  }
  '
}

_deco_ful_pd(){
  local RPT=$1
  local MX_RPT=$2
  local ASCII=$3
  local STR=$4
  local PD=$5
  local LN=$(echo ""|awk '
  {
    RPT="'${RPT}'"
    ASCII="'${ASCII}'"
    while(RPT-- >0)printf(ASCII)
  }')
  echo "$(_lpd ${MX_RPT} ${LN})$(_rpd ${PD} ${STR})$(_rpd ${MX_RPT} ${LN})"
}

trap_get_winsize.sh

コード表示

[oracle@centos gg]$ cat trap_get_winsize.sh
#!/bin/bash

trap '_win_sz' WINCH

_win_sz(){
  WIN_Y=$(tput lines)
  WIN_X=$(tput cols)
  :
}

_win_sz

_main.sh

コード表示

[oracle@centos gg]$ cat ./_main.sh
#!/bin/bash

source ./trap_get_winsize.sh
source ./fmt_deco_func.sh
source ./fmt_clr_func.sh

_uni_str(){
  CODE_POINT=$1
  ZERO_PAD=$2
  echo -n -e \\U$(printf "%0${ZERO_PAD}x" ${CODE_POINT})
}

_turn_back(){
  STR=$1
  WID=$2
  fold -w ${WID} <<<${STR}
}

_uni_code(){
  FROM_RN=$1
  TO_RN=$2
  ZERO_PAD=$3
  while read RN;do
    _uni_str ${RN} ${ZERO_PAD}
  done < <(seq ${FROM_RN} ${TO_RN})
}

_main(){
  START_CODE_POINT=$1
  END_CODE_POINT=$2
  ZERO_PAD=$3
  FOLD=$4
  _turn_back $(_uni_code ${START_CODE_POINT} ${END_CODE_POINT} ${ZERO_PAD}) ${FOLD}
}

fg_cyan "$(_deco_ful_pd  30 30 '\\x40' 'Japanese_Hiragana' 30 )"
_main '0x3040' '0x309f' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x23' 'Japanese_Katakana' 30)"
_main '0x30a0' '0x30ff' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x25' 'Box_Drawing' 30)"
_main '0x2500' '0x257f' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x24' 'Miscellaneous_Symbols' 30)"
_main '0x2600' '0x26ff' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x3d' 'Dingbats' 30)"
_main '0x2700' '0x27ff' 4 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x2a' 'Arrows,User_Interface' 30)"
_main '0x1f300' '0x1f3ff' 5 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x26' 'Animal_Symbols' 30)"
_main '0x1f400' '0x1f4ff' 5 ${WIN_X}
fg_cyan "$(_deco_ful_pd 30 30 '\\x2b' 'Emoticons' 30)"
_main '0x1f600' '0x1f64f' 5 ${WIN_X}

実行例

いつも使っているやつだと臨場感伝わりにくいからベタって貼った。

[oracle@centos gg]$ ./_main.sh
|@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@||Japanese_Hiragana             ||@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@|
぀ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ゗゘゙゚゛゜ゝゞゟ
|##############################||Japanese_Katakana             ||##############################|
゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ
|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%||Box_Drawing                   ||%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿
|$||Miscellaneous_Symbols         ||$|
☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚝⚞⚟⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿⛀⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛎⛏⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⛢⛣⛤⛥⛦⛧⛨⛩⛪⛫⛬⛭⛮⛯⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿
|==============================||Dingbats                      ||==============================|
✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟❠❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➕➖➗➘➙➚➛➜➝➞➟➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿⟀⟁⟂⟃⟄⟅⟆⟇⟈⟉⟊⟋⟌⟍⟎⟏⟐⟑⟒⟓⟔⟕⟖⟗⟘⟙⟚⟛⟜⟝⟞⟟⟠⟡⟢⟣⟤⟥⟦⟧⟨
⟩⟪⟫⟬⟭⟮⟯⟰⟱⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽⟾⟿
|******************************||Arrows,User_Interface         ||******************************|
🌀🌁🌂🌃🌄🌅🌆🌇🌈🌉🌊🌋🌌🌍🌎🌏🌐🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜🌝🌞🌟🌠🌡🌢🌣🌤🌥🌦🌧🌨🌩🌪🌫🌬🌭🌮🌯🌰🌱🌲🌳🌴🌵🌶🌷🌸🌹🌺🌻🌼🌽🌾🌿🍀🍁🍂🍃🍄🍅🍆🍇🍈🍉🍊🍋🍌🍍🍎🍏🍐🍑🍒🍓🍔🍕🍖🍗🍘🍙🍚🍛🍜🍝🍞🍟🍠🍡🍢🍣🍤🍥🍦🍧🍨🍩🍪🍫🍬🍭🍮🍯🍰🍱🍲🍳🍴🍵🍶🍷🍸🍹🍺🍻🍼🍽🍾🍿🎀🎁🎂🎃🎄🎅🎆🎇🎈🎉🎊🎋🎌🎍🎎🎏🎐🎑🎒🎓🎔🎕🎖🎗🎘🎙🎚🎛🎜🎝🎞🎟🎠🎡🎢🎣🎤🎥🎦🎧🎨🎩🎪🎫🎬🎭🎮🎯🎰🎱🎲🎳🎴🎵🎶🎷🎸🎹🎺🎻🎼🎽🎾🎿🏀🏁🏂🏃🏄🏅🏆🏇🏈🏉🏊🏋🏌🏍🏎🏏🏐🏑🏒🏓🏔🏕🏖🏗🏘🏙🏚🏛🏜🏝🏞🏟🏠🏡🏢🏣🏤🏥🏦🏧🏨🏩🏪🏫🏬🏭🏮🏯🏰🏱🏲🏳🏴🏵🏶🏷🏸🏹🏺🏻🏼🏽🏾🏿
|&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&||Animal_Symbols                ||&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|
🐀🐁🐂🐃🐄🐅🐆🐇🐈🐉🐊🐋🐌🐍🐎🐏🐐🐑🐒🐓🐔🐕🐖🐗🐘🐙🐚🐛🐜🐝🐞🐟🐠🐡🐢🐣🐤🐥🐦🐧🐨🐩🐪🐫🐬🐭🐮🐯🐰🐱🐲🐳🐴🐵🐶🐷🐸🐹🐺🐻🐼🐽🐾🐿👀👁👂👃👄👅👆👇👈👉👊👋👌👍👎👏👐👑👒👓👔👕👖👗👘👙👚👛👜👝👞👟👠👡👢👣👤👥👦👧👨👩👪👫👬👭👮👯👰👱👲👳👴👵👶👷👸👹👺👻👼👽👾👿💀💁💂💃💄💅💆💇💈💉💊💋💌💍💎💏💐💑💒💓💔💕💖💗💘💙💚💛💜💝💞💟💠💡💢💣💤💥💦💧💨💩💪💫💬💭💮💯💰💱💲💳💴💵💶💷💸💹💺💻💼💽💾💿📀📁📂📃📄📅📆📇📈📉📊📋📌📍📎📏📐📑📒📓📔📕📖📗📘📙📚📛📜📝📞📟📠📡📢📣📤📥📦📧📨📩📪📫📬📭📮📯📰📱📲📳📴📵📶📷📸📹📺📻📼📽📾📿
|++++++++++++++++++++++++++++++||Emoticons                     ||++++++++++++++++++++++++++++++|
😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😑😒😓😔😕😖😗😘😙😚😛😜😝😞😟😠😡😢😣😤😥😦😧😨😩😪😫😬😭😮😯😰😱😲😳😴😵😶😷😸😹😺😻😼😽😾😿🙀🙁🙂🙃🙄🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏

ターミナルだとこんな感じ。伝わるかなー。

あとがき

githubで製作中のascii artはascii artじゃなくなりそうな予感。。脱線しかしなさそう。まぁ、楽しいからいいか!以上、ありがとうございました。

おまけ

カラフルうんこ基礎編。くそみたいなことに時間費やしたぜ!b^^ fin。


[oracle@centos gg]$ ./___unco___.sh
💩
💩
💩
💩
💩
💩
💩

bashメソッド抜き出しシェルスクリプトを作成した話(しかけ)

tt.shスクリプト

localをはずしてrutineが呼ばれた順にvariableが上書きされていくことを利用しています。

コード表示

[oracle@centos rr]$ cat tt.sh
#!/bin/bash

_arg_prc(){
  ARG_LZ=$1
  ARG_LZ=$(echo "" | awk '
  BEGIN{
    ARG_LZ="'${ARG_LZ}'"
  }
  {
    print ARG_LZ

  }')
  SRC_FNM=$(echo "${ARG_LZ}" | tr ' ' '\n')
}

_cp(){
  FILE_NM=$1
  echo "${FILE_NM}"
  CMD="grep \")\s*{\" "${FILE_NM}" | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -t -I@ bash -c 'cp ${FILE_NM} test/@'"
  eval "${CMD}"
}

_while_prc_cp(){
  SRC_FNM="$1"
  echo "${SRC_FNM}"
  echo "${SRC_FNM}" | while read F;do
    _cp "${F}" 
  done
}

_while_prc_lzup(){
  SRC_FNM="$1"
  echo "${SRC_FNM}" | while read F;do
    _lzup "${F}" 
  done
}

_lzup(){
  SRC_FNM="$1"
  TGT_FNM=$(grep ")\s*{" ${SRC_FNM} | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh')
  echo "${TGT_FNM}"
  RUTINE_NM=$(echo "${TGT_FNM//_test/}" | sed -e 's/.sh//g')
  echo "${RUTINE_NM}"
}

_arg_prc $*
_while_prc_cp "${SRC_FNM}"
_while_prc_lzup "${SRC_FNM}"

t.shスクリプト

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

_build_cmd(){
  START_RN=$1
  END_RN=$2
  FILE_NM=$3
  BUILD_CMD="sed -i -n '""${START_RN}"",""${END_RN}""p""'"" ${FILE_NM}"
}

_first_filter(){
  START_STR=$1
  END_STR=$2
  FILE_NM=$3
  GET_START_RN_CMD="sed -n '/${START_STR}/=' ${FILE_NM} | tail -n 1"
  GET_END_RN_CMD="sed -n '/${END_STR}/=' ${FILE_NM} | tail -n 1"
  START_RN=$(eval "${GET_START_RN_CMD}")
  END_RN=$(eval "${GET_END_RN_CMD}")
}

_second_filter(){
  START_STR=$1
  END_STR=$2
  FILE_NM=$3
  GET_START_RN_CMD="sed -n '/${START_STR}/=' ${FILE_NM} | tail -n 1"
  GET_END_RN_CMD="sed -n '/${END_STR}/=' ${FILE_NM} | head -n 1"
  START_RN=$(eval "${GET_START_RN_CMD}")
  END_RN=$(eval "${GET_END_RN_CMD}")
}

_exec_cmd(){
  BUILD_CMD="$1"
  eval ${BUILD_CMD}
}

_insert_shebang(){
  FILE_NM=$1
  sed -i '1i#!/bin/bash\n' ${FILE_NM}
}

_main(){
  START_STR=$1
  END_STR=$2
  FILE_NM=$3
  _first_filter ${START_STR} ${END_STR} ${FILE_NM}
  _build_cmd ${START_RN} ${END_RN} ${FILE_NM}
  _exec_cmd "${BUILD_CMD}"
  _second_filter ${START_STR} ${END_STR} ${FILE_NM}
  _build_cmd ${START_RN} ${END_RN} ${FILE_NM}
  _exec_cmd "${BUILD_CMD}"
  _insert_shebang ${FILE_NM}
}

_main $1 $2 $3

tt.sh実行

コード表示

[oracle@centos rr]$ ./tt.sh "test/make/\\x2a.sh\\x20util/\\x2a.sh"
test/make/*.sh
util/*.sh
test/make/*.sh
bash -c cp test/make/*.sh test/_test_call_dynamic_cmd.sh 
bash -c cp test/make/*.sh test/_test_cmd_test_clean.sh 
bash -c cp test/make/*.sh test/_test_grp.sh 
bash -c cp test/make/*.sh test/_test_join.sh 
bash -c cp test/make/*.sh test/_test_split.sh 
bash -c cp test/make/*.sh test/_test_replica_cmd.sh 
bash -c cp test/make/*.sh test/_test_sort_cmd_with_str.sh 
bash -c cp test/make/*.sh test/_test_sort_cmd_with_numkey.sh 
bash -c cp test/make/*.sh test/_test_replace_cmd.sh 
bash -c cp test/make/*.sh test/_test_grp_rn.sh 
bash -c cp test/make/*.sh test/_test_mk_decopd_dynamic_cmd_non_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_decopd_dynamic_cmd_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_pd_dynamic_cmd_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_pd_dynamic_cmd_non_tac.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_dynamic_cmd.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_code_non_lf.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_code.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_char_non_lf.sh 
bash -c cp test/make/*.sh test/_test_mk_ascii_char.sh 
bash -c cp test/make/*.sh test/_test_radical_replica_str.sh 
bash -c cp test/make/*.sh test/_test_gradual_non_tac_replica_str.sh 
bash -c cp test/make/*.sh test/_test_gradual_tac_replica_str.sh 
bash -c cp test/make/*.sh test/_test_mk_pd_tac_cmd.sh 
util/*.sh
bash -c cp util/*.sh test/_test_lpd.sh 
bash -c cp util/*.sh test/_test_rpd.sh 
bash -c cp util/*.sh test/_test_deco_ful_rev.sh 
bash -c cp util/*.sh test/_test_deco_ful.sh 
bash -c cp util/*.sh test/_test_deco_ful_pd.sh 
bash -c cp util/*.sh test/_test_deco_lft_lpd.sh 
bash -c cp util/*.sh test/_test_deco_lft.sh 
bash -c cp util/*.sh test/_test_deco_rgt_rpd.sh 
bash -c cp util/*.sh test/_test_deco_rgt.sh 
_test_call_dynamic_cmd.sh
_test_cmd_test_clean.sh
_test_grp.sh
_test_join.sh
_test_split.sh
_test_replica_cmd.sh
_test_sort_cmd_with_str.sh
_test_sort_cmd_with_numkey.sh
_test_replace_cmd.sh
_test_grp_rn.sh
_test_mk_decopd_dynamic_cmd_non_tac.sh
_test_mk_decopd_dynamic_cmd_tac.sh
_test_mk_pd_dynamic_cmd_tac.sh
_test_mk_pd_dynamic_cmd_non_tac.sh
_test_mk_ascii_dynamic_cmd.sh
_test_mk_ascii_code_non_lf.sh
_test_mk_ascii_code.sh
_test_mk_ascii_char_non_lf.sh
_test_mk_ascii_char.sh
_test_radical_replica_str.sh
_test_gradual_non_tac_replica_str.sh
_test_gradual_tac_replica_str.sh
_test_mk_pd_tac_cmd.sh
_call_dynamic_cmd
_cmd_clean
_grp
_join
_split
_replica_cmd
_sort_cmd_with_str
_sort_cmd_with_numkey
_replace_cmd
_grp_rn
_mk_decopd_dynamic_cmd_non_tac
_mk_decopd_dynamic_cmd_tac
_mk_pd_dynamic_cmd_tac
_mk_pd_dynamic_cmd_non_tac
_mk_ascii_dynamic_cmd
_mk_ascii_code_non_lf
_mk_ascii_code
_mk_ascii_char_non_lf
_mk_ascii_char
_radical_replica_str
_gradual_non_tac_replica_str
_gradual_tac_replica_str
_mk_pd_tac_cmd
_test_lpd.sh
_test_rpd.sh
_test_deco_ful_rev.sh
_test_deco_ful.sh
_test_deco_ful_pd.sh
_test_deco_lft_lpd.sh
_test_deco_lft.sh
_test_deco_rgt_rpd.sh
_test_deco_rgt.sh
_lpd
_rpd
_deco_ful_rev
_deco_ful
_deco_ful_pd
_deco_lft_lpd
_deco_lft
_deco_rgt_rpd
_deco_rgt
[oracle@centos rr]$ tree test
test
├── __test.sh
├── _test_call_dynamic_cmd.sh
├── _test_cmd_test_clean.sh
├── _test_deco_ful.sh
├── _test_deco_ful_pd.sh
├── _test_deco_ful_rev.sh
├── _test_deco_lft.sh
├── _test_deco_lft_lpd.sh
├── _test_deco_rgt.sh
├── _test_deco_rgt_rpd.sh
├── _test_gradual_non_tac_replica_str.sh
├── _test_gradual_tac_replica_str.sh
├── _test_grp.sh
├── _test_grp_rn.sh
├── _test_join.sh
├── _test_lpd.sh
├── _test_mk_ascii_char.sh
├── _test_mk_ascii_char_non_lf.sh
├── _test_mk_ascii_code.sh
├── _test_mk_ascii_code_non_lf.sh
├── _test_mk_ascii_dynamic_cmd.sh
├── _test_mk_decopd_dynamic_cmd_non_tac.sh
├── _test_mk_decopd_dynamic_cmd_tac.sh
├── _test_mk_pd_dynamic_cmd_non_tac.sh
├── _test_mk_pd_dynamic_cmd_tac.sh
├── _test_mk_pd_tac_cmd.sh
├── _test_radical_replica_str.sh
├── _test_replace_cmd.sh
├── _test_replica_cmd.sh
├── _test_rpd.sh
├── _test_sort_cmd_with_numkey.sh
├── _test_sort_cmd_with_str.sh
├── _test_split.sh
├── make
│   └── mk_exe_cmd.sh
├── oput
└── tmp

3 directories, 34 files

t.sh実行

とりま一つだけ

コード表示

[oracle@centos rr]$ cat test/_test_split.sh
#!/bin/bash

_call_dynamic_cmd(){
  while read cmd;do
    eval ${cmd};
  done < <(cat $(pwd)/test/oput/mk_dynamic_cmd);
}

_cmd_test_clean(){
  rm -rf $(pwd)/test/{tmp,oput}/*
}

_grp(){
  local RN=$1
  local GRP=$2
  while read LINE;do
     echo ${LINE} | sed -e s/GRP/${GRP}/ | bash;
  done < <(seq ${RN} | xargs -I@ bash -c 'echo echo $\(\(@%GRP\)\)')
}

_join(){
  local LFT=$1
  local RGT=$2
  local TGT_FILE=$3
  paste -d ' ' ${LFT} ${RGT} > ${TGT_FILE}
}

_split(){
  local SRC_FILE=$1
  local TGT_FILE=$2
  cat ${SRC_FILE} | awk '
  BEGIN{
    TGT_FILE="'${TGT_FILE}'"
  }
  {
    print > TGT_FILE"_split_"$1
  }
  '
}

_replica_cmd(){
  local LINE_START=$1
  local LINE_END=$2
  local SRC_FILE=$3
  local TGT_FILE=$4
  seq ${LINE_START} ${LINE_END} | while read RN;do
    cat ${SRC_FILE}
  done > ${TGT_FILE}
}

_sort_cmd_with_str(){
  local SORT_KEY=$1
  local SRC_FILE=$2
  local TGT_FILE=$3
  sort -k ${SORT_KEY},${SORT_KEY} ${SRC_FILE} >> ${TGT_FILE}
}

_sort_cmd_with_numkey(){
  local SORT_KEY=$1
  local SRC_FILE=$2
  local TGT_FILE=$3
  sort -n -k ${SORT_KEY},${SORT_KEY} ${SRC_FILE} >> ${TGT_FILE}
}

_replace_cmd(){
  local LINE_START=$1
  local LINE_END=$2
  local TGT_FILE=$3
  while read F;do
    cat ${F} | nl | awk '
    BEGIN{
    }
    {
      print $3"\x20"$1"\x20"$5"\x20"$6;
    }
    '
  done < <((find $(pwd)/test/tmp -type f -name "*split*")) > ${TGT_FILE}
}

_grp_rn(){
  local LINE_START=$1
  local LINE_END=$2
  local REPLICA=$3
  local ZERO_PAD=$4
  local PLAIN_FILE=$(pwd)/test/tmp/mk_dynamic_cmd
  local POSTREPLICA_FILE=$(pwd)/test/tmp/mk_postreplica_dynamic_cmd
  local POSTSORT_FILE=$(pwd)/test/tmp/mk_postsort_dynamic_cmd
  local GRPTMP_FILE=$(pwd)/test/tmp/grptmp
  local POSTGRP_FILE=$(pwd)/test/tmp/mk_postgrp_dynamic_cmd
  local POSTREPLACE_FILE=$(pwd)/test/tmp/mk_postreplace_dynamic_cmd
  local OPUT_FILE=$(pwd)/test/oput/mk_dynamic_cmd
  _replica_cmd ${LINE_START} ${LINE_END} ${PLAIN_FILE} ${POSTREPLICA_FILE}
  _sort_cmd_with_str ${ZERO_PAD} ${POSTREPLICA_FILE} ${POSTSORT_FILE}
  printf "%0${ZERO_PAD}g\n" $(_grp $(cat ${POSTSORT_FILE} | wc -l) $(($(cat ${POSTSORT_FILE} | wc -l)/${REPLICA}))) | sort > ${GRPTMP_FILE}
  _join ${GRPTMP_FILE} ${POSTSORT_FILE} ${POSTGRP_FILE}
  _split ${POSTGRP_FILE} ${POSTGRP_FILE}
  _replace_cmd  ${LINE_START} ${LINE_END} ${POSTREPLACE_FILE}
  cp ${POSTREPLACE_FILE} ${OPUT_FILE}
}

_mk_decopd_dynamic_cmd_non_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local MX_PAD=$3
  local CMD=$4
  local ASCII=$5
  local STR=$6
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      MX_PAD="'${MX_PAD}'"
      CMD="'${CMD}'"
      ASCII="'${ASCII}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20"MX_PAD"\x20\x27"STR"\x27\x20\x27"ASCII"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END}) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_decopd_dynamic_cmd_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local MX_PAD=$3
  local CMD=$4
  local ASCII=$5
  local STR=$6
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      MX_PAD="'${MX_PAD}'"
      CMD="'${CMD}'"
      ASCII="'${ASCII}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20"MX_PAD"\x20\x27"STR"\x27\x20\x27"ASCII"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END} | tac) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_pd_dynamic_cmd_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local CMD=$3
  local STR=$4
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      CMD="'${CMD}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20\x27"STR"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END} | tac) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_pd_dynamic_cmd_non_tac(){
  local LINE_START=$1
  local LINE_END=$2
  local CMD=$3
  local STR=$4
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      CMD="'${CMD}'"
      STR="'${STR}'"
    }
    {
      print CMD"\x20"RN"\x20\x27"STR"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END}) >> $(pwd)/test/oput/mk_dynamic_cmd
}

_mk_ascii_dynamic_cmd(){
  local LINE_START=$1
  local LINE_END=$2
  local CMD=$3
  local STR=$4
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
      CMD="'${CMD}'"
      STR="'${STR}'"
    }
    {
      ASCII=sprintf("%c",strtonum(RN))
      print CMD"\x20""RNN""\x20\x27"ASCII"\x27\x20\x27"STR"\x27"
    }
    '
  done < <(seq ${LINE_START} ${LINE_END}) >> $(pwd)/test/tmp/mk_dynamic_cmd
}

_mk_ascii_code_non_lf(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      printf("\\x%x",strtonum(RN))
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}

_mk_ascii_code(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      printf("\\x%x\n",strtonum(RN))
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}

_mk_ascii_char_non_lf(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      printf("%c",strtonum(RN))
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}

_mk_ascii_char(){
  local LINE_START=$1
  local LINE_END=$2
  while read RN;do
    echo "" | awk '
    BEGIN{
      RN="'${RN}'"
    }
    {
      ASCII=sprintf("%c",strtonum(RN))
      print ASCII
    }
    '
  done < <(seq ${LINE_START} ${LINE_END})
}


_radical_replica_str(){
  local STR=$1
  local START_RN=$2
  local INTERVAL=$3
  local END_RN=$4
  local LN=$(while read RN;do
    printf "%${RN}s" ${STR};
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN}))
  echo "'"${LN}"'" | sed -e 's/ //g';
}

_gradual_non_tac_replica_str(){
  local STR=$1
  local START_RN=$2
  local INTERVAL=$3
  local END_RN=$4
  while read RN;do
    TMP_LN=$(printf "%$((RN==1?1:RN))s" "@");
    REP=$(echo "${TMP_LN}" | sed -e 's/ /@/g');
    echo "'"${REP//@/${STR}}"'";
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN})
}

_gradual_tac_replica_str(){
  local STR=$1
  local START_RN=$2
  local INTERVAL=$3
  local END_RN=$4
  while read RN;do
    TMP_LN=$(printf "%$((RN==1?1:RN))s" "@");
    REP=$(echo "${TMP_LN}" | sed -e 's/ /@/g');
    echo "'"${REP//@/${STR}}"'";
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN} | tac)
}

_mk_pd_tac_cmd(){
  STR=$1
  START_RN=$2
  INTERVAL=$3
  END_RN=$4
  DYN_CMD=$5
  PAD_CMD=$6
  REP_CMD=$7
  while read RN;do
    TMP=$( sed -e 's/ /@/g' <<<$(${REP_CMD} ${STR} ${START_RN} ${INTERVAL} ${RN}))
    echo ${TMP}
    #TODO  --opiton -a -b -c
    #${DYN_CMD} ${START_RN} ${RN} ${PAD_CMD} ${TMP##*@} 
    #${DYN_CMD} ${START_RN} ${END_RN} ${PAD_CMD} ${TMP##*@} 
    #${DYN_CMD} ${END_RN} ${END_RN} ${PAD_CMD} ${TMP##*@} 
  done < <(seq ${START_RN} ${INTERVAL} ${END_RN})
}
[oracle@centos rr]$ ./t.sh "_split(){" "^}" "test/_test_split.sh"
[oracle@centos rr]$ cat test/_test_split.sh
#!/bin/bash

_split(){
  local SRC_FILE=$1
  local TGT_FILE=$2
  cat ${SRC_FILE} | awk '
  BEGIN{
    TGT_FILE="'${TGT_FILE}'"
  }
  {
    print > TGT_FILE"_split_"$1
  }
  '
}

bash配列の間接参照

スクリプト

インデックスに注目

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(echo ${ARY} | sed -e 's/ /\n/g')
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(echo {a..c} | sed -e 's/ /\n/g')
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng ary
prt_ary_ok ary

実行例

インデックスに注目

コード表示

[oracle@centos rr]$ ./t.sh
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうがおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<$(echo ${ARY}))
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<$(echo {a..c}))
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng ary
prt_ary_ok ary

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<$(echo {a..c}))
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng $*
prt_ary_ok $*

[oracle@centos rr]$ ./t.sh ary
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$1")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng ary
prt_ary_ok ary
[oracle@centos rr]$ ./t.sh "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

prt_ary_ok(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

prt_ary_ng(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ="${ARY}"
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$2")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

prt_ary_ng "$1" "$2"
prt_ary_ok "$1" "$2"
[oracle@centos rr]$ ./t.sh ary "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
prt_ary_ng
a b c
1
a
b
c
0-->a b c
____________i_____________
prt_ary_ok
a b c
3
a
b
c
0-->a
1-->b
2-->c

こっちのほうもおしゃれかな

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

set_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

call_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$2")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

set_ary "$1" "$2"
call_ary "LZ"
[oracle@centos rr]$ ./t.sh ary "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
set_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
call_ary

0

こっちのほうもおしゃれかな

localはずすと見えるね

コード表示

[oracle@centos rr]$ cat t.sh
#!/bin/bash

set_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

call_ary(){
  echo "____________i_____________"
  echo "${FUNCNAME[0]}"
  local ARYNM=$1
  eval ARY=\${$ARYNM[@]}
  local LZ=();
  while read LN;do
    LZ+=(${LN});
  done < <(sed -e 's/ /\n/g' <<<${ARY})
  echo ${LZ[@]}
  echo ${#LZ[@]}
  for i in ${LZ[@]};do
    echo $i;
  done
  for i in ${!LZ[@]};do
    echo $i'-->'${LZ[$i]};
  done
}

echo "____________e_____________"
ary=();
while read LN;do
  ary+=(${LN});
done < <(sed -e 's/ /\n/g' <<<"$2")
echo ${ary[@]}
echo ${#ary[@]}
for i in ${ary[@]};do
  echo $i;
done
for i in ${!ary[@]};do
  echo $i'-->'${ary[$i]};
done

set_ary "$1" "$2"
call_ary "LZ"
[oracle@centos rr]$ ./t.sh ary "$(echo {a..c})"
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
set_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
call_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c

最後に

local外したシェルスクリプトを別ファイルのshellからcallできるようになる

コード表示

[oracle@centos rr]$ cat tt.sh
#!/bin/bash

source ./t.sh ary "$(echo {a..c})"
source ./t.sh ary "$(echo {A..C})"
[oracle@centos rr]$ ./tt.sh
____________e_____________
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
set_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________i_____________
call_ary
a b c
3
a
b
c
0-->a
1-->b
2-->c
____________e_____________
A B C
3
A
B
C
0-->A
1-->B
2-->C
____________i_____________
set_ary
A B C
3
A
B
C
0-->A
1-->B
2-->C
____________i_____________
call_ary
A B C
3
A
B
C
0-->A
1-->B
2-->C

1つのファイルを元にリネームしつつ複数ファイルにブレース展開

実行例

コード表示

[oracle@centos rr]$ grep ")\s*{" test/make/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'echo test/__test.sh test/@'
test/__test.sh test/_test_call_dynamic_cmd.sh
test/__test.sh test/_test_cmd_test_clean.sh
test/__test.sh test/_test_grp.sh
test/__test.sh test/_test_join.sh
test/__test.sh test/_test_split.sh
test/__test.sh test/_test_replica_cmd.sh
test/__test.sh test/_test_sort_cmd_with_str.sh
test/__test.sh test/_test_sort_cmd_with_numkey.sh
test/__test.sh test/_test_replace_cmd.sh
test/__test.sh test/_test_grp_rn.sh
test/__test.sh test/_test_mk_decopd_dynamic_cmd_non_tac.sh
test/__test.sh test/_test_mk_decopd_dynamic_cmd_tac.sh
test/__test.sh test/_test_mk_pd_dynamic_cmd_tac.sh
test/__test.sh test/_test_mk_pd_dynamic_cmd_non_tac.sh
test/__test.sh test/_test_mk_ascii_dynamic_cmd.sh
test/__test.sh test/_test_mk_ascii_code_non_lf.sh
test/__test.sh test/_test_mk_ascii_code.sh
test/__test.sh test/_test_mk_ascii_char_non_lf.sh
test/__test.sh test/_test_mk_ascii_char.sh
test/__test.sh test/_test_radical_replica_str.sh
test/__test.sh test/_test_gradual_non_tac_replica_str.sh
test/__test.sh test/_test_gradual_tac_replica_str.sh
test/__test.sh test/_test_mk_pd_tac_cmd.sh
[oracle@centos rr]$ grep ")\s*{" util/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'echo test/__test.sh test/@'
test/__test.sh test/_test_lpd.sh
test/__test.sh test/_test_rpd.sh
test/__test.sh test/_test_deco_ful_rev.sh
test/__test.sh test/_test_deco_ful.sh
test/__test.sh test/_test_deco_ful_pd.sh
test/__test.sh test/_test_deco_lft_lpd.sh
test/__test.sh test/_test_deco_lft.sh
test/__test.sh test/_test_deco_rgt_rpd.sh
test/__test.sh test/_test_deco_rgt.sh
[oracle@centos rr]$ grep ")\s*{" test/make/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp test/__test.sh test/@'
[oracle@centos rr]$ grep ")\s*{" util/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp test/__test.sh test/@'
[oracle@centos rr]$ tree
.
├── README.md
├── cnst
│   └── clr
│       ├── def_bgclr_cnst.sh
│       └── def_fgclr_cnst.sh
├── func
│   ├── clr
│   │   ├── def_bgclr_func.sh
│   │   └── def_fgclr_func.sh
│   └── exe
│       └── def_call_func.sh
├── iput
│   └── clr
├── main
│   ├── _main.sh
│   ├── make
│   │   ├── mk_call_func.sh
│   │   ├── mk_clr_cnst.sh
│   │   ├── mk_clr_func.sh
│   │   └── mk_exe_cmd.sh
│   ├── oput
│   │   └── mk_dynamic_cmd
│   └── tmp
├── test
│   ├── __test.sh
│   ├── _test_call_dynamic_cmd.sh
│   ├── _test_cmd_test_clean.sh
│   ├── _test_deco_ful.sh
│   ├── _test_deco_ful_pd.sh
│   ├── _test_deco_ful_rev.sh
│   ├── _test_deco_lft.sh
│   ├── _test_deco_lft_lpd.sh
│   ├── _test_deco_rgt.sh
│   ├── _test_deco_rgt_rpd.sh
│   ├── _test_gradual_non_tac_replica_str.sh
│   ├── _test_gradual_tac_replica_str.sh
│   ├── _test_grp.sh
│   ├── _test_grp_rn.sh
│   ├── _test_join.sh
│   ├── _test_lpd.sh
│   ├── _test_mk_ascii_char.sh
│   ├── _test_mk_ascii_char_non_lf.sh
│   ├── _test_mk_ascii_code.sh
│   ├── _test_mk_ascii_code_non_lf.sh
│   ├── _test_mk_ascii_dynamic_cmd.sh
│   ├── _test_mk_decopd_dynamic_cmd_non_tac.sh
│   ├── _test_mk_decopd_dynamic_cmd_tac.sh
│   ├── _test_mk_pd_dynamic_cmd_non_tac.sh
│   ├── _test_mk_pd_dynamic_cmd_tac.sh
│   ├── _test_mk_pd_tac_cmd.sh
│   ├── _test_radical_replica_str.sh
│   ├── _test_replace_cmd.sh
│   ├── _test_replica_cmd.sh
│   ├── _test_rpd.sh
│   ├── _test_sort_cmd_with_numkey.sh
│   ├── _test_sort_cmd_with_str.sh
│   ├── _test_split.sh
│   ├── make
│   │   └── mk_exe_cmd.sh
│   ├── oput
│   └── tmp
└── util
    └── def_deco_func.sh

15 directories, 48 files

[oracle@centos rr]$ grep ")\s*{" util/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp util/* test/@'

[oracle@centos rr]$ grep ")\s*{" test/make/*.sh | sed -e 's/(){//g' | xargs -I@ bash -c 'echo _test@.sh' | xargs -I@ bash -c 'cp test/make/* test/@'

bashの変数展開を使用したリネーム

変更前

コード表示

[oracle@centos pp]$ find $(pwd) -name "*inter*"
/home/oracle/pp/util/interface.sh
/home/oracle/pp/cmd/interface.sh
/home/oracle/pp/exec/interface.sh
/home/oracle/pp/ref/interface.sh

変更

コード表示

[oracle@centos pp]$ find $(pwd) -name "*inter*" | xargs -I@ bash -c 'tmp=@;f=${tmp##*/};d=${tmp%/*};echo mv ${d}/${f} ${d}/if.sh '
mv /home/oracle/pp/util/interface.sh /home/oracle/pp/util/if.sh
mv /home/oracle/pp/cmd/interface.sh /home/oracle/pp/cmd/if.sh
mv /home/oracle/pp/exec/interface.sh /home/oracle/pp/exec/if.sh
mv /home/oracle/pp/ref/interface.sh /home/oracle/pp/ref/if.sh
[oracle@centos pp]$ find $(pwd) -name "*inter*" | xargs -I@ bash -c 'tmp=@;f=${tmp##*/};d=${tmp%/*};mv ${d}/${f} ${d}/if.sh '

変更後

コード表示

[oracle@centos pp]$ find $(pwd) -name "*inter*"
[oracle@centos pp]$ find $(pwd) -name "*if*"
/home/oracle/pp/util/if.sh
/home/oracle/pp/cmd/if.sh
/home/oracle/pp/exec/if.sh
/home/oracle/pp/ref/if.sh

awkでbashファンクション作成

結果のイメージ

コード表示

[oracle@centos pp]$ ll
合計 20
-rw-r--r--. 1 oracle docker   35  6月  7 06:57 clr
drwxr-xr-x. 2 oracle docker 4096  6月  7 07:57 const
-rw-r--r--. 1 oracle docker  310  6月  7 07:57 def_bg_func.sh
-rw-r--r--. 1 oracle docker  310  6月  7 07:57 def_fg_func.sh
-rwxr-xr-x. 1 oracle docker  646  6月  7 07:56 mkfunc.sh
[oracle@centos pp]$ tree
.
├── clr
├── const
│   ├── def_clr_bg.sh
│   └── def_clr_fg.sh
├── def_bg_func.sh
├── def_fg_func.sh
└── mkfunc.sh

1 directory, 6 files
[oracle@centos pp]$ cat def_bg_func.sh
#!/bin/bash
source ./const/*;
red(){
  echo -e "${BG_RED}$*${NORMAL}";
}
green(){
  echo -e "${BG_GREEN}$*${NORMAL}";
}
yellow(){
  echo -e "${BG_YELLOW}$*${NORMAL}";
}
blue(){
  echo -e "${BG_BLUE}$*${NORMAL}";
}
magenta(){
  echo -e "${BG_MAGENTA}$*${NORMAL}";
}
cyan(){
  echo -e "${BG_CYAN}$*${NORMAL}";
}
[oracle@centos pp]$ cat def_fg_func.sh
#!/bin/bash
source ./const/*;
red(){
  echo -e "${FG_RED}$*${NORMAL}";
}
green(){
  echo -e "${FG_GREEN}$*${NORMAL}";
}
yellow(){
  echo -e "${FG_YELLOW}$*${NORMAL}";
}
blue(){
  echo -e "${FG_BLUE}$*${NORMAL}";
}
magenta(){
  echo -e "${FG_MAGENTA}$*${NORMAL}";
}
cyan(){
  echo -e "${FG_CYAN}$*${NORMAL}";
}

mkfunc.sh

コード表示

[oracle@centos pp]$ cat ./mkfunc.sh
#!/bin/bash
flg=$1
fnm=$2
while read line;do
  rn=$(echo ${line} | sed -e 's/ .*//');
  func_name=$(echo ${line} | sed -e 's/.* //');
  const_name=$(echo ${func_name^^});
  echo " "| awk '
  BEGIN{
    FLG="'${flg}'"
  }
  {
    RN="'${rn}'"
    if(RN == "1"){
      print "#!/bin/bash"
      print "source ./const/*;"
    }
    FUNC_NAME="'${func_name}'"
    CONST_NAME="'FG_${const_name}'"
    if(FLG == "bg"){
      CONST_NAME="'BG_${const_name}'"
    }
    print FUNC_NAME"\x28\x29\x7b\x0a\x20\x20""echo -e ""\x22""${"CONST_NAME"}""\x24\x2a""${NORMAL}""\x22\x3b\x0a\x7d"
  }'
done < <(cat clr | nl) >${fnm}

あとがき

もうちょい工夫したいけど時間ないから、fin!!!

仮想ゲストOS固定ip化の手番整理

まえがき

shell力が足りない。

実行ディレクトリ

_main.shに一元化してみた。

コード表示

[oracle@centos vx]$ pwd
/home/oracle/vx
[oracle@centos vx]$ ll
合計 16
-rwx------. 1 oracle docker 1721  6月  2 11:07 Vagrantfile
-rwx------. 1 oracle docker 3015  5月 24 05:16 Vagrantfile_org
-rwxr-xr-x. 1 oracle docker 3583  6月  6 23:28 _main.sh
-rwxr-xr-x. 1 oracle docker  155  6月  6 23:33 a.sh

Vagrantfile

コード表示

[oracle@centos vx]$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.synced_folder '.', '/mnt', type: 'rsync'
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.define "node1" do |centos_on_kvm|
    centos_on_kvm.vm.provision :shell, :path => "a.sh"
    centos_on_kvm.vm.hostname = "node1"
    centos_on_kvm.vm.provider "libvirt" do |spec|
      spec.memory = 2048
      spec.cpus = 1
    end
  end
  config.vm.define "node2" do |centos_on_kvm|
    centos_on_kvm.vm.provision :shell, :path => "a.sh"
    centos_on_kvm.vm.hostname = "node2"
    centos_on_kvm.vm.provider "libvirt" do |spec|
      spec.memory = 2048
      spec.cpus = 1
    end
  end
  config.vm.define "node3" do |centos_on_kvm|
    centos_on_kvm.vm.provision :shell, :path => "a.sh"
    centos_on_kvm.vm.hostname = "node3"
    centos_on_kvm.vm.provider "libvirt" do |spec|
      spec.memory = 2048
      spec.cpus = 1
    end
  end
  config.vm.define "node4" do |centos_on_kvm|
    centos_on_kvm.vm.provision :shell, :path => "a.sh"
    centos_on_kvm.vm.hostname = "node4"
    centos_on_kvm.vm.provider "libvirt" do |spec|
      spec.memory = 2048
      spec.cpus = 1
    end
  end
  config.vm.define "node5" do |centos_on_kvm|
    centos_on_kvm.vm.provision :shell, :path => "a.sh"
    centos_on_kvm.vm.hostname = "node5"
    centos_on_kvm.vm.provider "libvirt" do |spec|
      spec.memory = 2048
      spec.cpus = 1
    end
  end
  config.vm.define "node6" do |centos_on_kvm|
    centos_on_kvm.vm.provision :shell, :path => "a.sh"
    centos_on_kvm.vm.hostname = "node6"
    centos_on_kvm.vm.provider "libvirt" do |spec|
      spec.memory = 2048
      spec.cpus = 1
    end
  end
end

a.sh

a.shの中身だよ

コード表示

[oracle@centos vx]$ cat a.sh
#!/bin/bash
yum install -y net-tools
yum install -y lsof
yum install -y psmisc
yum install -y traceroute
yum install -y bridge-utils
yum install -y expect

固定ip化前の状態

コード表示

[oracle@centos vx]$ time vagrant up
real	0m55.164s
user	0m8.515s
sys	0m0.832s
[oracle@centos vx]$ vagrant ssh-config | grep -E "^Host|\s{1,}Host"
Host node1
  HostName 192.168.121.199
Host node2
  HostName 192.168.121.240
Host node3
  HostName 192.168.121.140
Host node4
  HostName 192.168.121.129
Host node5
  HostName 192.168.121.72
Host node6
  HostName 192.168.121.208
[oracle@centos vx]$ brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242fb2b351e	no		veth1486633
virbr0		8000.5254006df710	yes		virbr0-nic
							vnet0
							vnet1
							vnet2
							vnet3
							vnet4
							vnet5
virbr100		8000.525400ecc4a6	yes		virbr100-nic
virbr101		8000.525400922d8b	yes		virbr101-nic
virbr102		8000.5254003f5854	yes		virbr102-nic

_main.shをキックする

コード表示

[oracle@centos vx]$ su root
パスワード:
[root@centos vx]# ./_main.sh
ネットワーク mynet100 は強制停止されました

ネットワーク mynet100 の定義が削除されました

ネットワーク mynet101 は強制停止されました

ネットワーク mynet101 の定義が削除されました

ネットワーク mynet102 は強制停止されました

ネットワーク mynet102 の定義が削除されました

ネットワーク mynet100 が mynet100.xml から定義されました

ネットワーク mynet100 が起動されました

ネットワーク mynet101 が mynet101.xml から定義されました

ネットワーク mynet101 が起動されました

ネットワーク mynet102 が mynet102.xml から定義されました

ネットワーク mynet102 が起動されました

ネットワーク mynet100 は強制停止されました

ネットワーク mynet100 が mynet100.xml から定義されました

ネットワーク mynet100 が起動されました

ネットワーク mynet101 は強制停止されました

ネットワーク mynet101 が mynet101.xml から定義されました

ネットワーク mynet101 が起動されました

ネットワーク mynet102 は強制停止されました

ネットワーク mynet102 が mynet102.xml から定義されました

ネットワーク mynet102 が起動されました

ドメイン vx_node1 が vx_node1.xml から定義されました

ドメイン vx_node2 が vx_node2.xml から定義されました

ドメイン vx_node3 が vx_node3.xml から定義されました

ドメイン vx_node4 が vx_node4.xml から定義されました

ドメイン vx_node5 が vx_node5.xml から定義されました

ドメイン vx_node6 が vx_node6.xml から定義されました


vagrant reload

コード表示

[oracle@centos vx]$ time vagrant reload
==> node1: Halting domain...
==> node1: Starting domain.
==> node1: Waiting for domain to get an IP address...
==> node1: Waiting for SSH to become available...
==> node1: Creating shared folders metadata...
==> node1: Rsyncing folder: /home/oracle/vx/ => /mnt
==> node1: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> node1: flag to force provisioning. Provisioners marked to run always will still run.
==> node2: Halting domain...
==> node2: Starting domain.
==> node2: Waiting for domain to get an IP address...
==> node2: Waiting for SSH to become available...
==> node2: Creating shared folders metadata...
==> node2: Rsyncing folder: /home/oracle/vx/ => /mnt
==> node2: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> node2: flag to force provisioning. Provisioners marked to run always will still run.
==> node3: Halting domain...
==> node3: Starting domain.
==> node3: Waiting for domain to get an IP address...
==> node3: Waiting for SSH to become available...
==> node3: Creating shared folders metadata...
==> node3: Rsyncing folder: /home/oracle/vx/ => /mnt
==> node3: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> node3: flag to force provisioning. Provisioners marked to run always will still run.
==> node4: Halting domain...
==> node4: Starting domain.
==> node4: Waiting for domain to get an IP address...
==> node4: Waiting for SSH to become available...
==> node4: Creating shared folders metadata...
==> node4: Rsyncing folder: /home/oracle/vx/ => /mnt
==> node4: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> node4: flag to force provisioning. Provisioners marked to run always will still run.
==> node5: Halting domain...
==> node5: Starting domain.
==> node5: Waiting for domain to get an IP address...
==> node5: Waiting for SSH to become available...
==> node5: Creating shared folders metadata...
==> node5: Rsyncing folder: /home/oracle/vx/ => /mnt
==> node5: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> node5: flag to force provisioning. Provisioners marked to run always will still run.
==> node6: Halting domain...
==> node6: Starting domain.
==> node6: Waiting for domain to get an IP address...
==> node6: Waiting for SSH to become available...
==> node6: Creating shared folders metadata...
==> node6: Rsyncing folder: /home/oracle/vx/ => /mnt
==> node6: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> node6: flag to force provisioning. Provisioners marked to run always will still run.

real	1m42.110s
user	0m5.937s
sys	0m0.601s

固定ip化後の状態

コード表示

[oracle@centos vx]$ vagrant ssh-config | grep -E "^Host|\s{1,}Host"
Host node1
  HostName 192.168.100.2
Host node2
  HostName 192.168.100.3
Host node3
  HostName 192.168.101.2
Host node4
  HostName 192.168.101.3
Host node5
  HostName 192.168.102.2
Host node6
  HostName 192.168.102.3
[oracle@centos vx]$ brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242fb2b351e	no		veth1486633
virbr0		8000.5254006df710	yes		virbr0-nic
virbr100		8000.525400106400	yes		virbr100-nic
							vnet3
							vnet4
virbr101		8000.5254009fdb10	yes		virbr101-nic
							vnet0
							vnet5
virbr102		8000.5254009e9318	yes		virbr102-nic
							vnet1
							vnet2

疎通確認

外部のみ

コード表示

[oracle@centos vx]$ while read line;do echo ${line};sleep 10; echo ${line}|bash;done < <(seq 6 | xargs -I@ bash -c "echo a |awk '{print \"vagrant ssh node@ -c \"\"\x5c\x27\"\"traceroute 8.8.8.8\"\"\x5c\x27\"}'")
vagrant ssh node1 -c 'traceroute 8.8.8.8'
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.100.1)  0.141 ms  0.117 ms  0.098 ms
 2  192.168.1.1 (192.168.1.1)  1.009 ms  1.000 ms  0.988 ms
 3  nas827.p-kanagawa.nttpc.ne.jp (210.153.251.235)  4.888 ms  4.874 ms  4.866 ms
 4  210.139.125.169 (210.139.125.169)  4.972 ms  4.941 ms  4.929 ms
 5  210.165.249.177 (210.165.249.177)  6.271 ms  5.383 ms  6.357 ms
 6  0-0-0-18.tky-no-acr01.sphere.ad.jp (210.153.241.89)  9.074 ms  7.535 ms  7.492 ms
 7  0-0-1-0--2025.tky-t4-bdr01.sphere.ad.jp (202.239.117.14)  7.545 ms  6.645 ms  6.815 ms
 8  72.14.202.229 (72.14.202.229)  6.865 ms 72.14.205.32 (72.14.205.32)  6.279 ms 72.14.202.229 (72.14.202.229)  6.369 ms
 9  * * *
10  google-public-dns-a.google.com (8.8.8.8)  6.498 ms  11.164 ms  11.162 ms
vagrant ssh node2 -c 'traceroute 8.8.8.8'
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.100.1)  0.177 ms  0.145 ms  0.130 ms
 2  192.168.1.1 (192.168.1.1)  2.078 ms  2.140 ms  2.126 ms
 3  nas827.p-kanagawa.nttpc.ne.jp (210.153.251.235)  4.553 ms  4.540 ms  5.028 ms
 4  210.139.125.169 (210.139.125.169)  5.133 ms  5.099 ms  5.600 ms
 5  210.165.249.177 (210.165.249.177)  6.771 ms  6.915 ms  7.005 ms
 6  0-0-0-18.tky-no-acr01.sphere.ad.jp (210.153.241.89)  7.796 ms  6.482 ms  6.469 ms
 7  0-0-1-0--2025.tky-t4-bdr01.sphere.ad.jp (202.239.117.14)  6.912 ms  9.759 ms  9.742 ms
 8  72.14.202.229 (72.14.202.229)  9.722 ms 72.14.205.32 (72.14.205.32)  9.735 ms 72.14.202.229 (72.14.202.229)  9.851 ms
 9  * * *
10  google-public-dns-a.google.com (8.8.8.8)  9.791 ms  10.098 ms  10.236 ms
vagrant ssh node3 -c 'traceroute 8.8.8.8'
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.101.1)  0.105 ms  0.081 ms  0.071 ms
 2  192.168.1.1 (192.168.1.1)  1.157 ms  1.221 ms  1.209 ms
 3  nas827.p-kanagawa.nttpc.ne.jp (210.153.251.235)  4.555 ms  4.547 ms  5.230 ms
 4  210.139.125.169 (210.139.125.169)  5.218 ms  4.581 ms  5.193 ms
 5  210.165.249.177 (210.165.249.177)  6.360 ms  5.170 ms  5.684 ms
 6  0-0-0-18.tky-no-acr01.sphere.ad.jp (210.153.241.89)  10.565 ms  10.326 ms  10.306 ms
 7  0-0-1-0--2025.tky-t4-bdr01.sphere.ad.jp (202.239.117.14)  7.237 ms  6.757 ms  6.739 ms
 8  72.14.205.32 (72.14.205.32)  6.692 ms  6.684 ms  6.672 ms
 9  * * *
10  google-public-dns-a.google.com (8.8.8.8)  7.246 ms  7.269 ms  7.310 ms
vagrant ssh node4 -c 'traceroute 8.8.8.8'
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.101.1)  0.117 ms  0.098 ms  0.086 ms
 2  192.168.1.1 (192.168.1.1)  1.337 ms  1.328 ms  1.315 ms
 3  nas827.p-kanagawa.nttpc.ne.jp (210.153.251.235)  5.040 ms  5.031 ms  5.015 ms
 4  210.139.125.169 (210.139.125.169)  5.064 ms  5.045 ms  5.037 ms
 5  210.165.249.177 (210.165.249.177)  6.263 ms  5.925 ms  6.818 ms
 6  0-0-0-18.tky-no-acr01.sphere.ad.jp (210.153.241.89)  8.944 ms  7.222 ms  7.423 ms
 7  0-0-1-0--2025.tky-t4-bdr01.sphere.ad.jp (202.239.117.14)  8.024 ms  7.253 ms  7.240 ms
 8  72.14.205.32 (72.14.205.32)  6.980 ms 72.14.202.229 (72.14.202.229)  6.966 ms 72.14.205.32 (72.14.205.32)  7.013 ms
 9  * * *
10  google-public-dns-a.google.com (8.8.8.8)  6.952 ms  7.687 ms  6.928 ms
vagrant ssh node5 -c 'traceroute 8.8.8.8'
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.102.1)  0.134 ms  0.112 ms  0.100 ms
 2  192.168.1.1 (192.168.1.1)  1.683 ms  1.674 ms  1.663 ms
 3  nas827.p-kanagawa.nttpc.ne.jp (210.153.251.235)  4.572 ms  4.561 ms  4.544 ms
 4  210.139.125.169 (210.139.125.169)  4.636 ms  5.272 ms  5.260 ms
 5  210.165.249.177 (210.165.249.177)  6.053 ms  6.396 ms  6.731 ms
 6  0-0-0-18.tky-no-acr01.sphere.ad.jp (210.153.241.89)  7.816 ms  6.286 ms  6.272 ms
 7  0-0-1-0--2025.tky-t4-bdr01.sphere.ad.jp (202.239.117.14)  10.755 ms  6.881 ms  6.861 ms
 8  72.14.205.32 (72.14.205.32)  5.745 ms  6.561 ms 72.14.202.229 (72.14.202.229)  7.336 ms
 9  * * *
10  google-public-dns-a.google.com (8.8.8.8)  6.604 ms  6.460 ms  7.875 ms
vagrant ssh node6 -c 'traceroute 8.8.8.8'
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.102.1)  0.099 ms  0.082 ms  0.067 ms
 2  192.168.1.1 (192.168.1.1)  1.620 ms  1.609 ms  1.599 ms
 3  nas827.p-kanagawa.nttpc.ne.jp (210.153.251.235)  4.549 ms  5.257 ms  4.521 ms
 4  210.139.125.169 (210.139.125.169)  5.314 ms  5.304 ms  5.290 ms
 5  210.165.249.177 (210.165.249.177)  6.331 ms  6.404 ms  6.728 ms
 6  0-0-0-18.tky-no-acr01.sphere.ad.jp (210.153.241.89)  9.462 ms  6.419 ms  6.397 ms
 7  0-0-1-0--2025.tky-t4-bdr01.sphere.ad.jp (202.239.117.14)  7.266 ms  7.219 ms  7.347 ms
 8  72.14.205.32 (72.14.205.32)  7.070 ms  6.498 ms  7.053 ms
 9  * * *
10  google-public-dns-a.google.com (8.8.8.8)  6.993 ms  6.983 ms  9.076 ms

_main.shの中身

すきっりさせるのは後日。。。

コード表示

[oracle@centos vx]$ cat _main.sh
#!/bin/bash
OUTPUT=$(pwd)/output
CMD_DIR=$(pwd)/cmd
TMP_DIR=$(pwd)/tmp
AWK_DIR=$(pwd)/awk
LVT_DIR=/etc/libvirt/qemu
LVT_NET_DIR=${LVT_DIR}/networks

_offnet(){
  START_RN=$1
  END_RN=$2
  ( cd ${LVT_NET_DIR} && \
    seq ${START_RN} ${END_RN} | while read RN;do
      virsh net-destroy mynet${RN} && virsh net-undefine mynet${RN};
    done )
}

_mknet(){
  START_RN=$1
  END_RN=$2
  ( cd ${LVT_NET_DIR} && \
    seq ${START_RN} ${END_RN} | while read RN;do
      cp $(pwd)/tmpl/mynet@.xml $(pwd)/mynet${RN}.xml && sed -i s/@/${RN}/g $(pwd)/mynet${RN}.xml;
    done )
}

_onnet(){
  START_RN=$1
  END_RN=$2
  ( cd ${LVT_NET_DIR} && \
    seq ${START_RN} ${END_RN} | while read RN;do
      virsh net-define mynet${RN}.xml && virsh net-start mynet${RN};
    done )
}

_rebnet(){
  START_RN=$1
  END_RN=$2
  ( cd ${LVT_NET_DIR} && \
    seq ${START_RN} ${END_RN} | while read RN;do
      virsh net-destroy mynet${RN} && virsh net-define mynet${RN}.xml && virsh net-start mynet${RN}
    done )
}

_buildnet(){
  START_RN=$1
  END_RN=$2
  _offnet ${START_RN} ${END_RN}
  _mknet ${START_RN} ${END_RN}
  _onnet ${START_RN} ${END_RN}
}

_rmdir(){
  rm -rf {${OUTPUT},${CMD_DIR},${TMP_DIR},${AWK_DIR}};  
}

_mkdir(){
  mkdir -p {${OUTPUT},${CMD_DIR},${TMP_DIR},${AWK_DIR}};
}

_initdir(){
  _rmdir
  _mkdir
}

_mkvxnm(){
  START_RN=$1
  END_RN=$2
  seq ${START_RN} ${END_RN} | while read RN;do
    echo ${LVT_DIR}/vx_node${RN}.xml >>${OUTPUT}/vx_node;
  done
}

_grp(){
  RN=$1
  GRP=$2
  while read line; do
     echo ${line} | sed -e s/GRP/${GRP}/ | bash;
  done < <(seq ${RN} | xargs -I@ bash -c 'echo echo $\(\(@%GRP\)\)') | sort >${OUTPUT}/grp
}

_join(){
  LFT=$1
  RGT=$2
  OPT_FNM=$3
  paste -d ' ' ${LFT} ${RGT} >${OPT_FNM};
}

_callcmd(){
  RPT=$1
  while read line; do
    OPT_FNM=$(basename ${line} | sed -e s/\_/\\t/g | awk '{print $2}')
    [ -e ${OUTPUT}/${OPT_FNM} ] && rm -f ${OUTPUT}/${OPT_FNM};
    seq ${RPT} | while read rpt; do
      cat ${line} | sed -e s/@/${rpt}/ | bash >>${OUTPUT}/${OPT_FNM};
    done
  done < <(find ${CMD_DIR}/* -name "*")
}

_mkcmd(){
  CMD_FNM=$1
  CMD=$2
  echo ${CMD} > ${CMD_DIR}/${CMD_FNM};
}

_split(){
  LFT=$1
  RGT=$2
  paste -d ' ' ${LFT} ${RGT} | awk '
    OUTPUT="'"${OUTPUT}"'"
    {print>OUTPUT"\x2f""split_"$1}
  ' 1>/dev/null 
}

_mk_def_ip_script_with_awk(){
  cat <<EOF >${AWK_DIR}/def_ip.awk
{
  gsub(/[^ ]+/,"\x27&\x27");
  print "<host mac="\$3" name="\$2" ip=\x27""192.168."third_octet"."NR+1"\x27""/>"
}
EOF
}

_call_def_ip_script_with_awk(){
  START_RN=$1
  END_RN=$2
  seq ${START_RN} ${END_RN} | while read RN;do
    gawk -v "third_octet=$((${RN}+100))" -f ${AWK_DIR}/def_ip.awk ${OUTPUT}/split_${RN} > ${OUTPUT}/def_host_tag_$((${RN}+100));
  done
}

_kvm_guest_modify_network(){
  START_RN=$1
  END_RN=$2
  
  while read line; do
    OPT_FNM=$(basename ${line})
    sed -e "/range/a @" < <(cat ${line}) > ${TMP_DIR}/${OPT_FNM}
  done < <(find ${LVT_NET_DIR} -maxdepth 1 -name "mynet*")
  
  seq ${START_RN} ${END_RN} | while read RN; do
    SRC_FILE=${TMP_DIR}/mynet${RN}.xml;
    EMBED_STR=$(cat ${OUTPUT}/def_host_tag_${RN} | tr "\n" " ");
    TAR_FILE=${LVT_NET_DIR}/mynet${RN}.xml
    awk '{
      SRC_FILE="'"${SRC_FILE}"'"
      EMBED_STR="'"${EMBED_STR}"'"
      gsub("@",EMBED_STR);
      print;
    }' ${SRC_FILE} > ${LVT_NET_DIR}/mynet${RN}.xml
  done
}

_kvm_guest_modify_machine(){
  while read line; do
    echo ${line} | awk '
      BEGIN{
      }
      {
        net_name="mynet"$2+100;
        tar_file=$3;
        system("sed -i -e s/vagrant-libvirt/"net_name"/g "tar_file" ");
      }
      END{
      }
    ' 
  done < <(cat ${OUTPUT}/vx_node_grp|nl) 1>/dev/null
}

_redefvm(){
  START_RN=$1
  END_RN=$2
  ( cd ${LVT_DIR} && \
    seq ${START_RN} ${END_RN} | while read RN;do
      virsh define vx_node${RN}.xml;
    done )
}

_buildnet 100 102
_initdir
_mkcmd "get_macaddr_cmd" "virsh dumpxml vx_node@ | grep \"mac address\" | awk 'match(\$0, /[a-f0-9]{2}(:[a-f0-9]{2}){5}/) {print substr(\$0, RSTART, RLENGTH)}'"
_mkcmd "get_nodename_cmd" "echo node@"
_callcmd 6
_join ${OUTPUT}/nodename ${OUTPUT}/macaddr ${OUTPUT}/vminfo
_grp 6 3
_split ${OUTPUT}/grp ${OUTPUT}/vminfo
_mk_def_ip_script_with_awk
_call_def_ip_script_with_awk 0 2
_kvm_guest_modify_network 100 102
_rebnet 100 102
_mkvxnm 1 6
_join ${OUTPUT}/grp ${OUTPUT}/vx_node ${OUTPUT}/vx_node_grp
_kvm_guest_modify_machine
_redefvm 1 6

あとがき

やりきった。。後で見直しだ。。ねる。。

vagrantで.Vagrantフォルダ吹っ飛ばした時の話

まえがき

疲れていることもある。明日雨だから、ランしたけど、つかれたわ。勢いで消したわ。

参考文献

dhilst commented on 13 Apr 2018  

起動している仮想マシン確認

コード表示

[oracle@centos vx]$ vagrant up node1
Bringing machine 'node1' up with 'libvirt' provider...
Name `vx_node1` of domain about to create is already taken. Please try to run
`vagrant up` command again.
[oracle@centos vx]$ sudo virsh list --all
[sudo] oracle のパスワード:
 Id    名前                         状態
----------------------------------------------------
 57    vx_node3                       実行中
 58    vx_node1                       実行中
 59    vx_node5                       実行中
 60    vx_node6                       実行中
 61    vx_node4                       実行中
 62    vx_node2                       実行中

強制停止してundefineすればいい

コード表示

[oracle@centos vx]$ seq 6 | xargs -I@ bash -c 'sudo virsh destroy vx_node@ && sudo virsh undefine vx_node@'

状態確認

コード表示

[oracle@centos vx]$ sudo virsh list --all
 Id    名前                         状態
----------------------------------------------------

実はこれだけではまだいけぬ

boxイメージをvagrantアプリにマウントして使用しているけど、起動する仮想マシン分テンプレからコピーしている。こいつらも全部消してやるんだ。

コード表示

[oracle@centos vx]$ sudo virsh vol-list default
 名前               パス                                  
------------------------------------------------------------------------------
 centos-VAGRANTSLASH-7_vagrant_box_image_0.img /var/lib/libvirt/images/centos-VAGRANTSLASH-7_vagrant_box_image_0.img
 vx_node1.img         /var/lib/libvirt/images/vx_node1.img    
 vx_node2.img         /var/lib/libvirt/images/vx_node2.img    
 vx_node3.img         /var/lib/libvirt/images/vx_node3.img    
 vx_node4.img         /var/lib/libvirt/images/vx_node4.img    
 vx_node5.img         /var/lib/libvirt/images/vx_node5.img    
 vx_node6.img         /var/lib/libvirt/images/vx_node6.img    
[oracle@centos vx]$ sudo virsh vol-list default | awk '/vx/ {print $1}' | xargs -I@ bash -c 'sudo virsh vol-delete --pool default @'
ボリューム vx_node1.img は削除されました

ボリューム vx_node2.img は削除されました

ボリューム vx_node3.img は削除されました

ボリューム vx_node4.img は削除されました

ボリューム vx_node5.img は削除されました

ボリューム vx_node6.img は削除されました

[oracle@centos vx]$ sudo virsh vol-list default
 名前               パス                                  
------------------------------------------------------------------------------
 centos-VAGRANTSLASH-7_vagrant_box_image_0.img /var/lib/libvirt/images/centos-VAGRANTSLASH-7_vagrant_box_image_0.img

仮想マシン立ち上がるか確認

コード表示

[oracle@centos vx]$ vagrant up node1
Bringing machine 'node1' up with 'libvirt' provider...
==> node1: Creating image (snapshot of base box volume).
==> node1: Creating domain with the following settings...
==> node1:  -- Name:              vx_node1
==> node1:  -- Domain type:       kvm
==> node1:  -- Cpus:              1
==> node1:  -- Feature:           acpi
==> node1:  -- Feature:           apic
==> node1:  -- Feature:           pae
==> node1:  -- Memory:            2048M
==> node1:  -- Management MAC:    
==> node1:  -- Loader:            
==> node1:  -- Nvram:             
==> node1:  -- Base box:          centos/7
==> node1:  -- Storage pool:      default
==> node1:  -- Image:             /var/lib/libvirt/images/vx_node1.img (41G)
==> node1:  -- Volume Cache:      default
==> node1:  -- Kernel:            
==> node1:  -- Initrd:            
==> node1:  -- Graphics Type:     vnc
==> node1:  -- Graphics Port:     -1
==> node1:  -- Graphics IP:       127.0.0.1
==> node1:  -- Graphics Password: Not defined
==> node1:  -- Video Type:        cirrus
==> node1:  -- Video VRAM:        9216
==> node1:  -- Sound Type:	
==> node1:  -- Keymap:            en-us
==> node1:  -- TPM Path:          
==> node1:  -- INPUT:             type=mouse, bus=ps2
==> node1: Creating shared folders metadata...
==> node1: Starting domain.
==> node1: Waiting for domain to get an IP address...
==> node1: Waiting for SSH to become available...
    node1: 
    node1: Vagrant insecure key detected. Vagrant will automatically replace
    node1: this with a newly generated keypair for better security.
    node1: 
    node1: Inserting generated public key within guest...
    node1: Removing insecure key from the guest if it's present...
    node1: Key inserted! Disconnecting and reconnecting using new SSH key...
==> node1: Setting hostname...
==> node1: Configuring and enabling network interfaces...
    node1: SSH address: 192.168.121.83:22
    node1: SSH username: vagrant
    node1: SSH auth method: private key
==> node1: Rsyncing folder: /home/oracle/vx/ => /mnt
==> node1: Running provisioner: shell...
    node1: Running: /tmp/vagrant-shell20190607-1175-1kel8h.sh
    node1: Loaded plugins: fastestmirror
    node1: Determining fastest mirrors
    node1:  * base: ftp-srv2.kddilabs.jp
    node1:  * extras: ftp-srv2.kddilabs.jp
    node1:  * updates: ftp-srv2.kddilabs.jp
    node1: Resolving Dependencies
    node1: --> Running transaction check
    node1: ---> Package net-tools.x86_64 0:2.0-0.24.20131004git.el7 will be installed
    node1: --> Finished Dependency Resolution
    node1: 
    node1: Dependencies Resolved
    node1: 
    node1: ================================================================================
    node1:  Package         Arch         Version                          Repository  Size
    node1: ================================================================================
    node1: Installing:
    node1:  net-tools       x86_64       2.0-0.24.20131004git.el7         base       306 k
    node1: 
    node1: Transaction Summary
    node1: ================================================================================
    node1: Install  1 Package
    node1: 
    node1: Total download size: 306 k
    node1: Installed size: 918 k
    node1: Downloading packages:
    node1: Public key for net-tools-2.0-0.24.20131004git.el7.x86_64.rpm is not installed
    node1: warning: /var/cache/yum/x86_64/7/base/packages/net-tools-2.0-0.24.20131004git.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
    node1: Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    node1: Importing GPG key 0xF4A80EB5:
    node1:  Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) "
    node1:  Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
    node1:  Package    : centos-release-7-6.1810.2.el7.centos.x86_64 (@anaconda)
    node1:  From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    node1: Running transaction check
    node1: Running transaction test
    node1: Transaction test succeeded
    node1: Running transaction
    node1:   Installing : net-tools-2.0-0.24.20131004git.el7.x86_64                    1/1
    node1:  
    node1:   Verifying  : net-tools-2.0-0.24.20131004git.el7.x86_64                    1/1
    node1:  
    node1: 
    node1: Installed:
    node1:   net-tools.x86_64 0:2.0-0.24.20131004git.el7                                   
    node1: 
    node1: Complete!
    node1: Loaded plugins: fastestmirror
    node1: Loading mirror speeds from cached hostfile
    node1:  * base: ftp-srv2.kddilabs.jp
    node1:  * extras: ftp-srv2.kddilabs.jp
    node1:  * updates: ftp-srv2.kddilabs.jp
    node1: Resolving Dependencies
    node1: --> Running transaction check
    node1: ---> Package lsof.x86_64 0:4.87-6.el7 will be installed
    node1: --> Finished Dependency Resolution
    node1: 
    node1: Dependencies Resolved
    node1: 
    node1: ================================================================================
    node1:  Package         Arch              Version                Repository       Size
    node1: ================================================================================
    node1: Installing:
    node1:  lsof            x86_64            4.87-6.el7             base            331 k
    node1: 
    node1: Transaction Summary
    node1: ================================================================================
    node1: Install  1 Package
    node1: 
    node1: Total download size: 331 k
    node1: Installed size: 927 k
    node1: Downloading packages:
    node1: Running transaction check
    node1: Running transaction test
    node1: Transaction test succeeded
    node1: Running transaction
    node1:   Installing : lsof-4.87-6.el7.x86_64                                       1/1
    node1:  
    node1:   Verifying  : lsof-4.87-6.el7.x86_64                                       1/1
    node1:  
    node1: 
    node1: Installed:
    node1:   lsof.x86_64 0:4.87-6.el7                                                      
    node1: 
    node1: Complete!
    node1: Loaded plugins: fastestmirror
    node1: Loading mirror speeds from cached hostfile
    node1:  * base: ftp-srv2.kddilabs.jp
    node1:  * extras: ftp-srv2.kddilabs.jp
    node1:  * updates: ftp-srv2.kddilabs.jp
    node1: Resolving Dependencies
    node1: --> Running transaction check
    node1: ---> Package psmisc.x86_64 0:22.20-15.el7 will be installed
    node1: --> Finished Dependency Resolution
    node1: 
    node1: Dependencies Resolved
    node1: 
    node1: ================================================================================
    node1:  Package          Arch             Version                 Repository      Size
    node1: ================================================================================
    node1: Installing:
    node1:  psmisc           x86_64           22.20-15.el7            base           141 k
    node1: 
    node1: Transaction Summary
    node1: ================================================================================
    node1: Install  1 Package
    node1: 
    node1: Total download size: 141 k
    node1: Installed size: 475 k
    node1: Downloading packages:
    node1: Running transaction check
    node1: Running transaction test
    node1: Transaction test succeeded
    node1: Running transaction
    node1:   Installing : psmisc-22.20-15.el7.x86_64                                   1/1
    node1:  
    node1:   Verifying  : psmisc-22.20-15.el7.x86_64                                   1/1
    node1:  
    node1: 
    node1: Installed:
    node1:   psmisc.x86_64 0:22.20-15.el7                                                  
    node1: 
    node1: Complete!
    node1: Loaded plugins: fastestmirror
    node1: Loading mirror speeds from cached hostfile
    node1:  * base: ftp-srv2.kddilabs.jp
    node1:  * extras: ftp-srv2.kddilabs.jp
    node1:  * updates: ftp-srv2.kddilabs.jp
    node1: Resolving Dependencies
    node1: --> Running transaction check
    node1: ---> Package traceroute.x86_64 3:2.0.22-2.el7 will be installed
    node1: --> Finished Dependency Resolution
    node1: 
    node1: Dependencies Resolved
    node1: 
    node1: ================================================================================
    node1:  Package            Arch           Version                   Repository    Size
    node1: ================================================================================
    node1: Installing:
    node1:  traceroute         x86_64         3:2.0.22-2.el7            base          59 k
    node1: 
    node1: Transaction Summary
    node1: ================================================================================
    node1: Install  1 Package
    node1: 
    node1: Total download size: 59 k
    node1: Installed size: 92 k
    node1: Downloading packages:
    node1: Running transaction check
    node1: Running transaction test
    node1: Transaction test succeeded
    node1: Running transaction
    node1:   Installing : 3:traceroute-2.0.22-2.el7.x86_64                             1/1
    node1:  
    node1:   Verifying  : 3:traceroute-2.0.22-2.el7.x86_64                             1/1
    node1:  
    node1: 
    node1: Installed:
    node1:   traceroute.x86_64 3:2.0.22-2.el7                                              
    node1: 
    node1: Complete!
    node1: Loaded plugins: fastestmirror
    node1: Loading mirror speeds from cached hostfile
    node1:  * base: ftp-srv2.kddilabs.jp
    node1:  * extras: ftp-srv2.kddilabs.jp
    node1:  * updates: ftp-srv2.kddilabs.jp
    node1: Resolving Dependencies
    node1: --> Running transaction check
    node1: ---> Package bridge-utils.x86_64 0:1.5-9.el7 will be installed
    node1: --> Finished Dependency Resolution
    node1: 
    node1: Dependencies Resolved
    node1: 
    node1: ================================================================================
    node1:  Package               Arch            Version              Repository     Size
    node1: ================================================================================
    node1: Installing:
    node1:  bridge-utils          x86_64          1.5-9.el7            base           32 k
    node1: 
    node1: Transaction Summary
    node1: ================================================================================
    node1: Install  1 Package
    node1: 
    node1: Total download size: 32 k
    node1: Installed size: 56 k
    node1: Downloading packages:
    node1: Running transaction check
    node1: Running transaction test
    node1: Transaction test succeeded
    node1: Running transaction
    node1:   Installing : bridge-utils-1.5-9.el7.x86_64                                1/1
    node1:  
    node1:   Verifying  : bridge-utils-1.5-9.el7.x86_64                                1/1
    node1:  
    node1: 
    node1: Installed:
    node1:   bridge-utils.x86_64 0:1.5-9.el7                                               
    node1: 
    node1: Complete!
    node1: Loaded plugins: fastestmirror
    node1: Loading mirror speeds from cached hostfile
    node1:  * base: ftp-srv2.kddilabs.jp
    node1:  * extras: ftp-srv2.kddilabs.jp
    node1:  * updates: ftp-srv2.kddilabs.jp
    node1: Resolving Dependencies
    node1: --> Running transaction check
    node1: ---> Package expect.x86_64 0:5.45-14.el7_1 will be installed
    node1: --> Processing Dependency: libtcl8.5.so()(64bit) for package: expect-5.45-14.el7_1.x86_64
    node1: --> Running transaction check
    node1: ---> Package tcl.x86_64 1:8.5.13-8.el7 will be installed
    node1: --> Finished Dependency Resolution
    node1: 
    node1: Dependencies Resolved
    node1: 
    node1: ================================================================================
    node1:  Package         Arch            Version                    Repository     Size
    node1: ================================================================================
    node1: Installing:
    node1:  expect          x86_64          5.45-14.el7_1              base          262 k
    node1: Installing for dependencies:
    node1:  tcl             x86_64          1:8.5.13-8.el7             base          1.9 M
    node1: 
    node1: Transaction Summary
    node1: ================================================================================
    node1: Install  1 Package (+1 Dependent package)
    node1: 
    node1: Total download size: 2.1 M
    node1: Installed size: 4.9 M
    node1: Downloading packages:
    node1: --------------------------------------------------------------------------------
    node1: Total                                              1.1 MB/s | 2.1 MB  00:01     
    node1: Running transaction check
    node1: Running transaction test
    node1: Transaction test succeeded
    node1: Running transaction
    node1:   Installing : 1:tcl-8.5.13-8.el7.x86_64                                    1/2
    node1:  
    node1:   Installing : expect-5.45-14.el7_1.x86_64                                  2/2
    node1:  
    node1:   Verifying  : 1:tcl-8.5.13-8.el7.x86_64                                    1/2
    node1:  
    node1:   Verifying  : expect-5.45-14.el7_1.x86_64                                  2/2
    node1:  
    node1: 
    node1: Installed:
    node1:   expect.x86_64 0:5.45-14.el7_1                                                 
    node1: 
    node1: Dependency Installed:
    node1:   tcl.x86_64 1:8.5.13-8.el7                                                     
    node1: 
    node1: Complete!

あとがき

疲れた