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の実行)
(3) 登録されたジョブの一覧表示(atqの実行)
(4) スクリプト
at_filter
確認したのは下記のディストリビューションの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
コメント 0