広告 bash Linux Mac

便利なシェル芸

便利でいいかんじなシェル芸をご紹介します。

LinuxやUnixって奥が深いですね!

でコマンドをくくる

`` でコマンドをくくってやると、その中のコマンドを実行し、 そのコマンドが標準出力に出力した内容が結果となります。

タイムスタンプぺっちょりと貼り付けたい時とか使える。

# cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.`date +%F`
# ls -al /usr/local/apache2/conf/
total 116
drwxr-xr-x  6 root   root    4096 Mar 21 15:50 .
drwx------ 16 apache apache  4096 Jan 14 06:49 ..
drwxr-xr-x  2 root   root    4096 Jan 14 13:22 extra
-rw-r--r--  1 root   root    5809 Feb 24 10:06 httpd.conf
-rw-r--r--  1 root   root    5809 Mar 21 15:50 httpd.conf.2015-03-21

これは有名ですね。

第二引数に第一引数の値を入れる

第二引数を第一引数+任意の文字としたい場合には以下のようにする。

command Line{,char}

バックアップ取りたい時とかよさ気。

# cp /usr/local/apache2/conf/original/httpd.conf{,.backup}
#  ls -al /usr/local/apache2/conf/original/
total 60
drwxr-xr-x 3 root root  4096 Mar 21 16:02 .
drwxr-xr-x 6 root root  4096 Mar 21 15:50 ..
drwxr-xr-x 2 root root  4096 Sep 20  2012 extra
-rw-r--r-- 1 root root 15032 Jan 14 10:23 httpd.conf
-rw-r--r-- 1 root root 15032 Mar 21 15:58  httpd.conf.backup

``くくり技も一緒に使える

# cp /usr/local/apache2/conf/original/httpd.conf{,.`date +%F`}
# ls -al /usr/local/apache2/conf/original/
total 44
drwxr-xr-x 3 root root  4096 Mar 21 15:59 .
drwxr-xr-x 6 root root  4096 Mar 21 15:50 ..
drwxr-xr-x 2 root root  4096 Sep 20  2012 extra
-rw-r--r-- 1 root root 15032 Jan 14 10:23 httpd.conf
-rw-r--r-- 1 root root 15032 Mar 21 15:59 httpd.conf.2015-03-21

何かスマートでかっこ良くないですか?笑

コマンドの標準出力のdiffを取る

記法 <(...) を使うとサブシェルの出力が 名前付きパイプにつながるので一時ファイルを作らなくてもdiffがとれる。

ソートして比較とか、CSVの見出し行を比較したい時とか便利すぎてションベンちびるかと思った。

diff <(command_A) <(command_B)

全く実用的な例じゃないけど、こんなかんじになります。笑

# diff <(ls -l /www/bacchi.me/logs/2014/02/) <(ls -l /www/bacchi.me/logs/2015/02/)
1,25c1,29
< total 484
< -rw-r--r-- 1 root root     80 Feb  2  2014 access_log.02
< -rw-r--r-- 1 root root     30 Feb  3  2014 access_log.03
< -rw-r--r-- 1 root root     20 Feb  4  2014 access_log.04
< -rw-r--r-- 1 root root     60 Feb  5  2014 access_log.05
< -rw-r--r-- 1 root root     20 Feb  6  2014 access_log.06
< -rw-r--r-- 1 root root   1057 Feb  7  2014 access_log.07
< -rw-r--r-- 1 root root    946 Feb  8  2014 access_log.08
< -rw-r--r-- 1 root root    678 Feb  9  2014 access_log.09
< -rw-r--r-- 1 root root  45475 Feb 10  2014 access_log.10
< -rw-r--r-- 1 root root   1502 Feb 11  2014 access_log.11
< -rw-r--r-- 1 root root   9726 Feb 12  2014 access_log.12
< -rw-r--r-- 1 root root   4198 Feb 13  2014 access_log.13
< -rw-r--r-- 1 root root  17892 Feb 14  2014 access_log.14
< -rw-r--r-- 1 root root  73732 Feb 18  2014 access_log.18
< -rw-r--r-- 1 root root  76409 Feb 19  2014 access_log.19
< -rw-r--r-- 1 root root 160510 Feb 20  2014 access_log.20
< -rw-r--r-- 1 root root   3852 Feb 21  2014 access_log.21
< -rw-r--r-- 1 root root    274 Feb 22  2014 access_log.22
< -rw-r--r-- 1 root root    515 Feb 23  2014 access_log.23
< -rw-r--r-- 1 root root   5184 Feb 24  2014 access_log.24
< -rw-r--r-- 1 root root   4033 Feb 25  2014 access_log.25
< -rw-r--r-- 1 root root   2055 Feb 26  2014 access_log.26
< -rw-r--r-- 1 root root   1168 Feb 27  2014 access_log.27
< -rw-r--r-- 1 root root    660 Feb 28  2014 access_log.28
---
> total 28336
> -rw-r--r-- 1 root root 5737560 Feb  1 23:59 access_log.01
> -rw-r--r-- 1 root root 5246962 Feb  2 23:54 access_log.02
> -rw-r--r-- 1 root root  578086 Feb  3 23:58 access_log.03
> -rw-r--r-- 1 root root  719239 Feb  4 23:57 access_log.04
> -rw-r--r-- 1 root root  989370 Feb  5 23:59 access_log.05
> -rw-r--r-- 1 root root  843059 Feb  6 23:57 access_log.06
> -rw-r--r-- 1 root root  680409 Feb  7 23:59 access_log.07
> -rw-r--r-- 1 root root  430895 Feb  8 23:49 access_log.08
> -rw-r--r-- 1 root root  880153 Feb  9 23:58 access_log.09
> -rw-r--r-- 1 root root  877617 Feb 10 23:57 access_log.10
> -rw-r--r-- 1 root root  302701 Feb 11 23:37 access_log.11
> -rw-r--r-- 1 root root  683151 Feb 12 23:58 access_log.12
> -rw-r--r-- 1 root root  876300 Feb 13 23:57 access_log.13
> -rw-r--r-- 1 root root  272862 Feb 14 23:55 access_log.14
> -rw-r--r-- 1 root root  193741 Feb 15 23:56 access_log.15
> -rw-r--r-- 1 root root  741164 Feb 16 23:58 access_log.16
> -rw-r--r-- 1 root root  762839 Feb 17 23:59 access_log.17
> -rw-r--r-- 1 root root  891256 Feb 18 23:57 access_log.18
> -rw-r--r-- 1 root root  699542 Feb 19 23:55 access_log.19
> -rw-r--r-- 1 root root  725712 Feb 20 23:59 access_log.20
> -rw-r--r-- 1 root root  510341 Feb 21 23:59 access_log.21
> -rw-r--r-- 1 root root  552488 Feb 22 23:54 access_log.22
> -rw-r--r-- 1 root root 1177091 Feb 23 23:39 access_log.23
> -rw-r--r-- 1 root root  793636 Feb 24 23:45 access_log.24
> -rw-r--r-- 1 root root 1201977 Feb 25 23:47 access_log.25
> -rw-r--r-- 1 root root  623083 Feb 26 23:51 access_log.26
> -rw-r--r-- 1 root root  579741 Feb 27 23:57 access_log.27
> -rw-r--r-- 1 root root  280677 Feb 28 23:55 access_log.28

Sponsor Link

-bash, Linux, Mac