[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:24300] Re: Checking AC on/off on apmd



佐野@浜松です。

In <20001003170946C.tach@xxxxxxxxxxxxx>,
  on "Tue, 3 Oct 2000 17:06:04 +0900',
   with "Re: Checking AC on/off on apmd",
 tach@debian.or.jp (Taku YASUI) さん wrote:

> fsatoh> どんなファイル名にして入れましたか?
> fsatoh> わたしもハマリましたが、/etc/pam/apmd_proxy スクリプトの
> fsatoh> 正規表現が不適切なような気がします。
> 
> たしかに…

本当に ?

> でも,「99shutdown」という名前で置きましたが,きちんと実行
> されてるようですよ.
> 
> なぜだらう…
> 
> fsatoh> -               for d in $(ls $DIR | grep '^[-_0-9A-Za-z]\+$'); do
> fsatoh> +               for d in $(ls $DIR | egrep '^[0-9][0-9]'); do
> 
> fsatoh> もとのままだと、英数字もしくは - から始まって、+ で終わるファイル名に
> fsatoh> しかマッチしません。

 GNU grep を甘く見てますね :)

man grep より引用:

 %%%%%  %%%%%  %%%%%  %%%%%  %%%%%  %%%%%  %%%%%  %%%%%  %%%%%  %%%%% 

正規表現
       grep は、基本的な正規表現と 古い UNIX の egrep に相当する
       拡張正規表現の 2 種類の正規表現を扱う事ができます。ただし、
       本 grep (GNU プロダクトの grep) では、どちらの表現も機能的に
       違いありません。他のインプリメントでは、基本正規表現は、
       拡張正規表現より制限があるようになっていますが、本 grep では、
       表記上の違いだけです。ここでは、拡張正規表現について説明し、
       基本正規表現との違いはその後に説明します。

(中略)

       次の表現は、他の正規表現を修飾します。拡張正規表現です。
       ?      他の正規表現の後に指定し、0 回か 1 回マッチさせます。
              マッチしない場合も一致とします。
       *      他の正規表現の後に指定し、0 回以上マッチさせます。
              マッチしない場合も一致とします。
       +      他の正規表現の後に指定し、その正規表現を 1 回以上
              マッチさせます。なお、少なくとも 1 回はマッチしなく
              てはいけません。

(中略)

       基本正規表現では、 ?, +, {, |, (, ) は、正規表現としての
       特殊な意味は持たず、その文字本来のパターンにマッチします。
       代わりに、 \?, \+, \{, \|, \(, \) を使う事で、拡張正規表現と
       同じ機能を持ちまます。

 %%%%%  %%%%%  %%%%%  引用おわり %%%%%  %%%%%  %%%%%  %%%%%  %%%%%

つまり、GNU grep の場合、 "grep '^[-_0-9A-Za-z]\+$')" と
 "egrep '^[-_0-9A-Za-z]+$' " は同じ機能を提供します。

したがって、「英数字またはハイフン '-' もしくはアンダースコア '_' で
始まるファイル名だけが実行される」のはそのとおりですが、「+ で終る
ファイル名」というのは誤解です。

なお、「英数字またはハイフンもしくはアンダースコアで始まるファイル名」
だけを実行対象にするのは Debian の標準ツールである run-parts の仕様です。

 %%%%%% man run-parts より引用 %%%%% %%%%% %%%%% %%%%% %%%%%

DESCRIPTION
       run-parts runs a number of scripts or programs found in  a
       single  directory  directory.   Filenames  should  consist
       entirely of upper and lower case letters,  digits,  under-
       scores,  and  hyphens.   Subdirectories  of  directory and
       files with other names will be silently ignored.

       Scripts must follow the #!/bin/interpretername  convention
       in  order  to be executed.  They will not automatically be
       executed by /bin/sh.

       The files found will be run in the lexical sort  order  of
       the filenames.

 %%%%%% 引用おわり %%%%% %%%%% %%%%% %%%%% %%%%% %%%%% %%%%%

> 結局,上記のように変更しても,start stop しか吐いてくれない
> ようなので,あきらめて,ruby でスクリプト書いて,cron で動かす
> ようにしました.

違うとは思うけど、スクリプトに実行属性が無いとか (でもそれなら
 start/stop でも実行されないか) /root/apm.log に書き込む権限が
無いとか。

 woody ではやってないのですが、中原さんと同じように試しに
 potato 上で

 $ cat /etc/apm/event.d/test 
#! /bin/sh
logger -t pcmcia "msg: $*"

 $ ls -l /etc/apm/event.d/test 
-rwxr-xr-x    1 root     root           39 Oct  4 00:25 /etc/apm/event.d/test

なスクリプトを作ってみたら、ちゃんと AC の抜き挿しで /var/log/messages に

Oct  4 00:25:49 pika pcmcia: msg: change power
Oct  4 00:25:52 pika pcmcia: msg: change power

と記録されました。

-- 
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)