68user's page 掲示板

Prev< No. 179〜189> Next  [最新発言に戻る] [過去ログ一覧]
No. 179 # mm 1999/03/13 (土) 21:06
>と表示するのはシェルの役目で、このときlsは実行されていないはずです。
ふむふむ、勉強になりますですm(_o_)m

>shの仕様としては、-cに続いてコマンドを指定すると、マッチしなかった
>場合でも、コマンドにワイルドカードをそのまま渡しているようです。
なるほどー、生でunixに触れないので、このヘンの微妙なところが
よく分からないのです(^^;

>ファイルの内容を標準入力から受けるのはよくありますが、
>ファイル名を標準入力から受け取るのは普通ではないと思います。
そっかぁ…、filterという概念からは逸脱してるかも知れないですね。
確かに、findも-execで済みますし、ls(csh likeな指定)を使いたい
ってのはMS-DOSでの事情でしょうし…

MS-DOS版独自のオプション-S を追加して、その場合だけ標準入力を読む
ことにします。
ありがとうございましたm(_o_)m


ところで、Human68k って、モトローラのチップで動くOSですよね。
X68000でしたっけ?

No. 180 # 68user 1999/03/14 (日) 01:23
> 正規表現は(snip!)シェルとはどのくらいの違いがあるのでしょうか?

シェルの ? や * (これらをglobとかワイルドカードと言います)は
正規表現とは大きく違います。が、機能は限られてるので、覚えるのは簡単です。
    ワイルドカードの ? は正規表現の . に相当 (任意の一文字)
    ワイルドカードの * は正規表現の .* に相当 (任意の文字列)
    ワイルドカードの [ ] は正規表現の [ ] に相当 (任意の文字列)
シェルによって少し違いはありますが(例えば csh では、[^a] は「a以外の1文字」
という意味を持たない。shは [!a] は [^a] と同じ意味)、基本的にこれだけです。

ただし、ワイルドカードはファイル/ディレクトリ名を扱うためのものなので、
    * は、先頭が . で始まるファイルにはマッチしない
        (例えば ls * は、.cshrc などのドットから始まるファイルにはマッチしない)
    ? や * は、パスの区切りである / にはマッチしない
ということになってます。

あと、~ や ~username をホームディレクトリへの置換するのも
一応ワイルドカードの機能らしいです。他には {} があるけど
省略(これはglobというより、ただの文字列処理機能かも)。

> その手順では、何か不具合が予想されますか?
.forwardに書いただけではログ作成や排他処理をやってくれないです。
ですから、ログや排他処理が不必要だったり、そこらへんの処理を
スクリプト側で行っているなら大丈夫じゃないでしょうか。

> コマンド別のページが在るといいかも...
http://X68000.startshop.co.jp/~68user/unix/
ソースを見てみると…検索用FORMが…。
設置しようと思ってるんですが、めんどくさくて進んでません(^^;

> X68000でしたっけ?
X680x0上で動くMS-DOSクローンなOSです。ハドソン謹製(笑)

No. 181 # mm 1999/03/14 (日) 03:03
>X680x0上で動くMS-DOSクローンなOSです。ハドソン謹製(笑)
コンベンショナルメモリ(640KB)の制限がないんで、
TSRが常駐し放題って噂は聞いてました(^^;
しかし、ハドソン製ですか…シャープじゃないんだぁ(驚)

>シェルの ? や * (これらをglobとかワイルドカードと言います)は
>正規表現とは大きく違います。
シェルのglobも、広い意味では、正規表現と言っていいんじゃないで
しょうか。
ドラゴンブックでも、正規表現によるパターン記述の例として、Lexや
AWKと共に、シェルのファイル指定を挙げています。
ただ、一般的には、sed, grep, awk, perl等の正規表現とglobは
区別されるようですんで、表現だけの問題ではありますが…

No. 182 # チワワ大王 1999/03/15 (月) 01:09
セガのシェンムーBBSで、ここを紹介しました。
過去ログが充実しているので、多くの人に知ってもらいたいと
思ったからです。勝手にすみません。以前も勝手に紹介したような。

No. 183 # Asano [E-mail] 1999/03/15 (月) 11:41

UNIX User (1995年12月号)の
特集:UNIXはソースが決め手です。
    PART 1:GNUツールで最新のデバッグ環境を整えよう●向川信一
    PART 2:GDBを活用してデバッグを効率的に●向川信一
の内容を知りたくて、パックナンバーを探していました。
Solaris2.6のマシンですが、デバッグ環境構築のノウハウが
なく、どこから手をつけていいのやら、わからない状況に
あります。簡単な抜粋を書いていただけるだけでも、
助かります。お手数かと思いますが、お願いします。

No. 184 # M.Masuda 1999/03/15 (月) 20:54
シェルってあまり(globって言うんですか)ワイルドカードの種類が
なかったんですね。
やっぱり複雑な事をさせようと思うと、Perlや他の言語で記述する
んですね。

例えば日付が変わったら、cronでwebのアクセスログから自分のペー
ジヘのアクセスを切り出して、その中の特定ページヘのアクセスの件
数をカウントして結果をメールで送る。
なんて複雑な物は、シェルだけでなく何らかのツールや他の言語を使
ったほうが簡単ってことですね。
#実際にシェルスクリプトでやろうとしたがうまく行かず...う〜ん。

>.forwardに書いただけではログ作成や排他処理をやってくれないです。
ログ作成ってのは説明でのリファイルの事ですか?

それと補足質問?ですが、
^hogeは先頭がhogeで始まる。
hoge$行末がhogeで終わる。
でいいんしょうか?
もしそうならPerlの正規表現と同じですね。
#上記が正しいとするとprocmail解説文の hoge$は head_string_hoge
#でも hoge でもマッチしませんか???
#ぜんぜんはずしてるかなぁ(汗)

いろいろ解かってくると、何でも疑問になってきます。(ワクワク)
実験すればいいのでしょうが、他の方のためにも解説してもらえれば
うれしいなっと。(^_^)V
#そんなの解からないのはお前だけなんて言わないで〜(汗)

>> コマンド別のページが在るといいかも...
> http://X68000.startshop.co.jp/~68user/unix/
最近namazuっていう検索エンジンの名前をあちらこちらで聞きます。
これを使ってみたらどうでしょうか。

#最近本業よりシェルいぢってる方が面白くなっている自分が恐い...

No. 185 # 68user 1999/03/16 (火) 00:43
> ログ作成ってのは説明でのリファイルの事ですか?
いえ、ただのログです。例えばこんなの。
    From owner-xxx@xxx Fri Mar 12 01:56:59 1999
        Subject: [xxx 1251] xxx 350 =?ISO-2022-JP?B?GyRCJFgkTkRJMkMbKEI=?=
        Folder: /home/xxx/script/deliv 2321
    From all-request Mon Mar 15 23:18:17 1999
        Subject: [xxx 377] xxx will be rebooted.
        Folder: /usr/sbin/sendmail -oi j5306050@cs.gunma-u.ac.jp 1520
    From all-request Mon Mar 15 23:38:23 1999
        Subject: [xxx 378] Re: xxx will be rebooted.
        Folder: /usr/sbin/sendmail -oi j5306050@cs.gunma-u.ac.jp 1691

> ^hogeは先頭がhogeで始まる。 hoge$行末がhogeで終わる。でいいんしょうか?
あってます。

> procmail解説文の hoge$は head_string_hoge も hoge でもマッチしませんか?
    * ^Subject: hoge$
は、ヘッダに「(行頭)Subject: hoge(行末)」という行があれば
commandに渡されるわけです。ヘッダ名(この場合はSubject)の
前に ^ がありますから。
# 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど

> 最近namazuっていう検索エンジンの名前をあちらこちらで聞きます。
namazuを使うなら、1つ1つのコマンドを別ファイルにしないと
いけない(というか、そうしないと使う意味がない)んですよね〜。んが、
    % quota
    Filesystem usage quota limit timeleft files quota limit timeleft
    /raid 14794 15000 20000 2529 3000 4000
ファイル数の余裕が…ない…(^^;

> 例えば日付が変わったら、cronでwebのアクセスログから自分のペー
> ジヘのアクセスを切り出して、その中の特定ページヘのアクセスの件
> 数をカウントして結果をメールで送る。
これくらいならシェルスクリプトでもできますよ。
日付が変わったら、という部分はcronにまかせるとして、
    #!/bin/csh -f
    set log="/var/log/httpd-access.log"; # ログファイル名
    set yeasterday_log="/tmp/yesterday_log.$$"; # テンポラリファイル
    grep `date -v-1d "+%d/%b/%Y"` $log > $yesterday_log # 前日の日付でgrep
    set top_count = `grep -E 'GET /~$USER/(index.html)? ' $yesterday_log | wc -l`;
    set unix_count = `grep -E 'GET /~$USER/unix/(index-unix.html)? ' $yesterday_log | wc -l`;
    echo "top page $top_count hit."
    echo "unix page $unix_count hit."
    rm $yesterday_log
とか。stdoutへの出力はcronによってメールで送られてきます。
でもまぁ、さらに機能を付け加えていこうと思っているなら、
perlでやっちゃった方がいいんでしょうけど。

> セガのシェンムーBBSで、ここを紹介しました。
どもども。リンク・URL紹介・引用はご自由にどうぞ。

> コンベンショナルメモリ(640KB)の制限がないんで、
> TSRが常駐し放題って噂は聞いてました(^^;
でも12MBの壁があって(アドレスレジスタが24bitだから)、それを
越えるのにはDOSと同じようなことをしてました。まぁ、全盛期には
それが問題になるほどメモリを積めませんでしたが。

> シェルのglobも、広い意味では、正規表現と言っていいんじゃないでしょうか。
ん〜どうなんでしょうね。僕は目的の違い(globはファイルにマッチさせるもの)
と、文法・機能の違いから、別物として説明するようにしてます。
でも同じものと言った方が初心者にわかりやすいなら、それはそれで
いいと思います。

> Solaris2.6のマシンですが、デバッグ環境構築のノウハウがなく、
特集は、gdbのインストールと、gdbの使用法の2本立てですが
どちらがお望みですか? すいませんがお返事は *メール*でお願いします。

No. 186 # mm 1999/03/16 (火) 02:00
>でも12MBの壁があって(アドレスレジスタが24bitだから)、

MS-DOSしか使ってなかった頃の最大実装は8MBだから、
私の場合、壁のうちに入らないなぁ…(^^;


>でも同じものと言った方が初心者にわかりやすいなら、それはそれで
>いいと思います。

私の経験なんですが、昔、正規表現といえばsedやgrep(その頃はawkも
perlも知らなかった)で使うアレのことしかないと思い込んでたことが
あって、誤解を招く文脈で「正規表現」という言葉を使って指摘された
覚えがあるんです。
難しい話でよく理解できなかったために、正確には覚えてないんですが、
文脈自由文法や正規文法とかの話に割り込んで、何か発言をしたのだと
思います(^^;
だから、これらを区別して説明するのはいいと思うのですが、globも
正規表現の一種又はサブセット?だということも含めておいた方が、
初心者の方にも後々のためにはいいんじゃないかなと思ったのです。
とは言うものの、議論するほどの問題ではないので、この話題は以降
無視して頂いて結構です。

No. 187 # M.Masuda 1999/03/16 (火) 20:46
すいません...
>いえ、ただのログです。例えばこんなの。
これなんですが、
>.forwardに書いただけではログ作成や排他処理をやってくれないです。
procmailが勝手にログを作ってくれるのですか?
もしそうなら、それは何処に出力されるのですか?
と言う意味でした。
#日本語ヘタですいません...(^^ゞ

> * ^Subject: hoge$
> は、ヘッダに「(行頭)Subject: hoge(行末)」という行があれば
> commandに渡されるわけです。ヘッダ名(この場合はSubject)の
> 前に ^ がありますから。
> # 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど
あっなるほど、よく見ると間にスペースが...
これは、2つの条件([^hoge]、[hoge$])が指定されているのですね。
(↑ procmailの解説)
#ネスケのデフォルトフォントをMS P明朝にしているのだけど
#半角スペースが分かりづらいしアンダーバーが表示されないし、
#設定変更しようかな...気に入っているんだけど。←独り言


>namazuを使うなら...
そうなんですか。最近よく見かけるのでもしかして、と思ったので
すが。
#「ですよね〜。んが、」の行にはやられた...
#思わず吹き出して周りの白い目が...


>これくらいならシェルスクリプトでもできますよ。
う〜ん、シェル使い。というか、やっとPerlを使えるようになってき
た私には、「さすが」以外言葉が出ない...(((((^^;


>正規表現の一種又はサブセット?だということも含めておいた方が、
>初心者の方にも後々のためにはいいんじゃないかなと思ったのです。
初心者として、ありがたきお言葉。感謝感謝m(_ _)m >mmさん

No. 188 # M.Masuda 1999/03/16 (火) 23:25
自己レスです。
偶然というか出来すぎ?でレスキューさんのページでprocmailの
解説を見つけました。
#しかも一昨日UPばかりの情報。もしかしてここでのやり取りを見
#ていた?!

いやはや、だいぶ変な事を書いてますね(^^ゞ

ログの件は環境変数に、
LOGFILE=$HOME/procmail.log
の様な指定をしたときにprocmailによって作成される。
ですね。

>> # 本当は * ^Subject: *hoge$ にしなきゃいけないんだけど
> あっなるほど、よく見ると間にスペースが...
これは単純にメールのヘッダーの規則で、Subject:とその内容の
間には半角スペースが必要なんですね。

なんてオバカなんでしょう。
大変失礼をいたしました。(^^;

謎が解決しました。

No. 189 # 68user 1999/03/18 (木) 03:14
> ログの件は環境変数に、
> LOGFILE=$HOME/procmail.log
> の様な指定をしたときにprocmailによって作成される。
yes. 環境変数じゃなくてレシピに書くんですけどね。

> これは単純にメールのヘッダーの規則で、Subject:とその内容の
> 間には半角スペースが必要なんですね。
    Subject: hoge(スペース1つ)
    Subject: hoge(スペース2つ)
    Subject:hoge(スペースなし)
のいずれにも対応できるようにするためです。調べてませんが、
どちらもメールヘッダとしてはアリなんじゃないでしょうか。
(RFC821あたりで決まってるかな?)


ところで素朴な疑問ですが、補完って知ってます?>M.Masudaさん(や他の方)
コマンドラインでTABやCtrl-Dを押すやつ。

知らない人が多いなら、軽く解説を書こうかなと思ってるんですが。
入門書でシェルの補完まで触れているのを見たことないんで、
もし補完を知らずに「UNIXのコマンド入力は めんどくさいものだ」
と思う方がいたらヤだなと思いまして。

Prev< No. 179〜189> Next  [最新発言に戻る] [過去ログ一覧]