あけましておめでとうございます。

久しぶり?にシェルスクリプト 書いたらあれれ?って思ったのでメモ。

その1


やりたいことは、ファイル開いて特定の箇所にコマンド実行結果を埋めるみたいな感じだったんですが、テンプレートに%s埋めておいて、printfで結果埋めればいいとか高をくくっていた所軽ハマり。

[user@host TEMP]$ ll
合計 0
-rw-r--r-- 1 user users 0  1月 14 18:38 a
-rw-r--r-- 1 user users 0  1月 14 18:38 b
-rw-r--r-- 1 user users 0  1月 14 18:38 c
[user@host TEMP]$
[user@host TEMP]$ printf %s $(ls -l)
合計0-rw-r--r--1userusers01月1418:38a-rw-r--r--1userusers01月1418:38b-rw-r--r--1userusers01月1418:38c[user@host TEMP]$
えー…
とりあえず囲む
[user@host TEMP]$ printf %s "$(ls -l)"
合計 0
-rw-r--r-- 1 user users 0  1月 14 18:38 a
-rw-r--r-- 1 user users 0  1月 14 18:38 b
-rw-r--r-- 1 user users 0  1月 14 18:38 c[user@host TEMP]$

そうそうこういう感じ。
んで、これを%sを埋めたメールテンプレートにかまして
[user@host TEMP]$ cat tpl

testだよ。ls -l の結果だよ

%s

ほらね


[user@host TEMP]$ printf "$(cat tpl)" "$(ls -l)"

testだよ。ls -l の結果だよ

合計 4
-rw-r--r-- 1 user users  0  1月 14 18:38 a
-rw-r--r-- 1 user users  0  1月 14 18:38 b
-rw-r--r-- 1 user users  0  1月 14 18:38 c
-rw-r--r-- 1 user users 42  1月 14 18:45 tpl

ほらね[user@host TEMP]$
うむ。これをsendmailとかに渡してやればよかろう。

その2

過去の日付を連続してとりたくて date -d "1 days ago"とかすればいいやとか思ってたら
       seq 0 12 | while read ago
        do
                day=$(date -d '${ago} days ago' +%Y-%m-%d);
                echo ${day}
        done
だとダメで、こう書く。
       seq 0 12 | while read ago
        do
                day=$(date -d ${ago}' days ago' +%Y-%m-%d);
                echo ${day}
        done
変数展開されちゃうからね…そらそうだよね…   

Add Comments

名前
 
  絵文字
 
 
プロフィール

john_doe_

Twitter
instagram(SnapWidget)
タグクラウド
  • ライブドアブログ