68user's page 掲示板

Prev< No. 177〜180> Next  [最新発言に戻る] [過去ログ一覧]
No. 177 # 68user 1999/03/13 (土) 07:46
> 以前に「シェルは、マッチしなかった場合に
> そのままコマンドに渡す」という話を聞いたことがあるのを
> 思い出して、あんな風に書いたのです。
おろ、確かにそうなりますね。以下は全て推測ですが、
shでもcshでもコマンドラインで
    % ls *nonexistent
    ls: No match.
と表示するのはシェルの役目で、このときlsは実行されていないはずです。
しかしperlから、
    open(IN,"ls *nonexistent 2>&1 |"); print <IN>;
とすると、「No match」ではなく、
    ls: *nonexistent: No such file or directory
と表示されます。これはおそらくperlが
    sh -c 'ls *nonexistent 2>&1'
を実行しているからです。shの仕様としては、-cに続いてコマンドを指定すると、
マッチしなかった場合でも、コマンドにワイルドカードをそのまま渡している
ようです。

>>files = filelist("a:\dir\a*.txt");
> これは、上のFindFirstとFindNextを使って簡単に実現できるので、
調べてみたら、Human68kにもfilesとnfilesというライブラリがありました
(機能は同じ)。そういえば昔ファイラーを作ったとき使った記憶があるなぁ…

> ls ... | command とか find ... | command で引数ファイルを渡すのは
> 普通ではないのでしょうか?
ファイルの内容を標準入力から受けるのはよくありますが、
ファイル名を標準入力から受け取るのは普通ではないと思います。
なぜなら、
    % find . -name \*hoge -exec touch {} \;
で簡単に実現できるからです(他にはxargsを使うとか)。

> ところで、あるアカウントに来たメールをきっかけにスクリプト
> やCGIを実行させるってのはどうすれば実現できるのでしょう?
> forword辺りに仕掛けをするんでしょうか?
procmailを使うことが多いようですね。
# http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#procmail

これを見た人が理解できるかどうか知りたいので、詳しくは書きません。
これを読んでわからなかったら、どの辺がわかりにくいか教えてくださいね。

> #download.cgiの件は解決しましたでしょうか?
ただ単にContent-Dispositionというものが使えるものかどうか
知りたかったので、特に困っていたわけではないのです(^^;

> UNIX Userの雑誌のバックナンバー(1995年12月号)を
> 探しています。

ありますけど、お譲りするのはちょっと…(他人のなんで)。
これこれの特集のこの点を知りたいということでしたら、簡単で
いいなら抜粋してここに書いてもいいですが。

No. 178 # M.Masuda 1999/03/13 (土) 18:29
ありがとう68Userさん。\(^^)/

>procmailを使うことが多いようですね。
># http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#procmail
このへんはカキコした後に見て、この辺の解説でできるかなぁと
思っていた所です。

ちょっと試してみましたが、私のしたいことはprocmailを使わなく
ても .forwordに |exec command
で出来そうです。

具体的には、あるアカウントにメールを出すと、現在のサーバー
状況を出力させる様な事をさせたかったのです。
.forwordだけで、procmailを使わずにそのままスクリプトが実行で
きたのでその方向で試してみたいと思います。
その手順では、何か不具合が予想されますか?

>これを見た人が理解できるかどうか知りたいので、詳しくは書きません。
私は、スクリプトで処理しようと思っていたので、procmailの解説
をよく見ていませんでした。(^^;
良く読めば解りますヨ。
環境のない人には全然解らないだろうけど、解説内容を自分で試す
事が出来れば、動作が解るでしょう。

一つ気づいたのですが、超大作のUNIX解説ですが一部だけを印刷し
ようとすると、カット&ペーストしなければならないので、コマン
ド別のページが在るといいかも...
#贅沢言うなって....すいませんm(_ _)m

あとメタキャラの解説なんて在るとうれしいかも

ついでにもう一つ。
正規表現はperlから勉強した(進行形)のですが、シェルとはどのく
らいの違いがあるのでしょうか?

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です。ハドソン謹製(笑)

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