あけましておめでとうございます。
久しぶり?にシェルスクリプト 書いたらあれれ?って思ったのでメモ。
やりたいことは、ファイル開いて特定の箇所にコマンド実行結果を埋めるみたいな感じだったんですが、テンプレートに%s埋めておいて、printfで結果埋めればいいとか高をくくっていた所軽ハマり。
とりあえず囲む
そうそうこういう感じ。
んで、これを%sを埋めたメールテンプレートにかまして
久しぶり?にシェルスクリプト 書いたらあれれ?って思ったのでメモ。
その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変数展開されちゃうからね…そらそうだよね…