シェル芸160本ノック解答例 その3
技術評論社から出版された『1日1問、半年以内に習得 シェル・ワンライナー160本ノック』の解答例です。
- 解答例の範囲: 問題21〜問題30
- 前回の解答例: シェル芸160本ノック解答例 その2
問題21
$ echo dir_{a,b}/file_* dir_c/dir_*{,/dir_*}/file_* | tr ' ' '\n' | sort
dir_a/file_1
dir_a/file_2
dir_b/file_1
dir_b/file_2
dir_c/dir_b/dir_a/file_1
dir_c/dir_b/file_1
dir_c/dir_b/file_2
問題22
# ダミーのFQDNを100個生成
$ w(){ shuf /usr/share/dict/words | tr 'A-Z' 'a-z' | tail -n100; }; paste -d. <(w) <(w) <(for i in {1..20}; do echo com org {co,or,ne}.jp | tr ' ' '\n' | shuf; done)
frowzy.humulus.ne.jp
pediadontist.enteral.com
bonehead.forthrightness.or.jp
(...略...)
apocarpy.threnodic.com
anthraxylon.schizogenously.co.jp
reputed.sidler.org
問題23
# ロック状態を解除するためのプロセスIDが`5249`の場合:
$ kill -s CONT 5249
問題24
$ trap 'rm -f ~/tmp/{.,}*' EXIT
問題25
シェルスクリプトpipefail.bash
の5行目を変更した解答例です。
#!/bin/bash -e
set -o pipefail
trap 'rm .tmp.top10' EXIT
sort | head > .tmp.top10 || true
echo "+++++TOP 10+++++"
cat .tmp.top10
5行目の末尾に|| true
を付け加えています。
問題26
$ echo "trap 'dh=\$(date '+%-H'); [ $dh -ge 18 -o $dh -lt 4 ] && echo 早く帰れ' CHLD" >> ~/.bashrc
問題27
$ while sleep 3 ; do date ; done
2022年 10月 18日 火曜日 03:18:03 JST
2022年 10月 18日 火曜日 03:18:06 JST
2022年 10月 18日 火曜日 03:18:09 JST
^C
# 解答例のワンライナーを実行:
# 簡易置換`^old^new^`で、直前のコマンドを3秒周期から1秒周期に変えて再実行
$ ^3^1^
while sleep 1 ; do date ; done
2022年 10月 18日 火曜日 03:18:16 JST
2022年 10月 18日 火曜日 03:18:17 JST
2022年 10月 18日 火曜日 03:18:18 JST
^C
問題28
# ワンライナー実行前:
$ ls
-Rf important_dir '~'
# 解答例のワンライナーを実行:
$ rm -fR -- '-Rf' '~'
# ワンライナー実行後:
$ ls
important_dir
問題29
$ bash -n fb.bash |& awk -F '[: ]' 'NR==1{print $4}'
6
# `shellcheck`と`jq`を使った別解
$ shellcheck -f json fb.bash | jq '.[0].line'
6
問題30
$ declare +f -p | while read l; do [[ "$l" =~ \ BASH ]] && { v=${l#*-* }; echo ${v%%=*}; }; done
BASH
BASHOPTS
BASHPID
BASH_ALIASES
BASH_ARGC
BASH_ARGV
BASH_ARGV0
BASH_CMDS
BASH_COMMAND
BASH_COMPLETION_VERSINFO
BASH_LINENO
BASH_REMATCH
BASH_SOURCE
BASH_SUBSHELL
BASH_VERSINFO
BASH_VERSION
Written on October 18, 2022