SSブログ

atコマンドの出力 [Linux]

atコマンドの出力がLinuxのディストリビューションによって少々異なる。
確認したのは下記のディストリビューションのatコマンドで、タイムスタンプのフォーマット、コマンド・インタプリタに関するワーニング・メッセージの有無において違いがある。

1. 出力の違い
(1) Debian GNU/Linux 6.0 (at 3.1.12-1)
 ・タイムスタンプのフォーマット: "Thu Feb 20 14:50:00 1997" (man pageの記述通り)
 ・ワーニング・メッセージ: "warning: commands will be executed using /bin/sh"

(2) CentOS 6.0 (at-3.1.10-43.el6.i686)
 ・タイムスタンプのフォーマット: "YYYY-MM-DD hh:mm"
 ・ワーニング・メッセージ: なし

(3) openSUSE 11.3 (at-3.1.8-1081.1.i586)
 ・タイムスタンプのフォーマット: 上記(2)と同じ
 ・ワーニング・メッセージ: 上記(1)と同じ

2. 出力の統一
 どうしても出力を同じにする必要があったため、下記のような対応を行った。
(1) フィルタ用のスクリプト(at_filter)の作成


下記のスクリプトの項を参照。


(2) ジョブの登録(atの実行)
<at-command-line> 2>&1 | at_filter

(3) 登録されたジョブの一覧表示(atqの実行)
<atq-command-line> | at_filter

(4) スクリプト
 at_filter
#!/bin/sh

change_date_form() {
    local info date

    while read info; do
        echo $info | \
        egrep "[A-z]{3} [A-z]{3} [0-9]{1,2} ..:..:.. [0-9]{4}" >/dev/null 2>&1
        if [ $? = 0 ]; then
            # change date format
            date=`\
                echo $info | \
                sed 's/.* \(... ... .\{1,2\} ..:..:.. ....\).*/\1/'`
            date=`date -d "$date" '+%Y-%m-%d %H:%M'`
            info=`echo $info | sed "s/ ... ... .\{1,2\} ..:..:.. ..../ $date/"`
        fi

        case $info in
        [0-9]*) # display status
            echo $info | sed 's/ /\t/'
            ;;
        *)
            echo $info
            ;;
        esac
    done
}

egrep -v "^warning: commands will be executed using /bin/sh" | \
change_date_form

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。