68user's page 掲示板

Prev< No. 171〜176> Next  [最新発言に戻る] [過去ログ一覧]
No. 171 # 68user 1999/03/12 (金) 02:21
> ひょっとして、touch *.txt で該当ファイルがなかった場合に
> touch に argv[1] が渡らないのかな?…と思ったのですが、
> ちゃんと *.txt が渡ってました…(^^;
えっと、これはUNIXの話ですか? UNIXの場合はgrobの展開はシェルが
担当します。*.txtがない場合、
    % touch *.txt (touchに限らず全てのコマンド)
    touch: No match.
となりますが、これはシェルがtouchを実行する前に
はじいてます。csh/tcshの場合、シェル変数nonomatchを
設定すると、マッチするファイルがなくてもエラーにならなくなり、
touch に *.txtという文字列がそのまま渡されます。
普通、コマンドラインでnonomatchを設定することはまずないですが。

…と、mmさんなら知ってそうなことを書いてしまった。

> MS-DOSの場合、ファイル指定のメタキャラクタに * と ? しか使えないので
DOSを離れて久しいのですが(使ってたのはHuman68kですけど)、
DOSってgrobの展開は各プログラムの担当ですよね。そういう
ときに便利な関数ってライブラリで用意されてるんでしたっけ。
# char **files;
# files = filelist("a:\dir\a*.txt");
# とか。

さて、FF8をやらねば。

No. 172 # 68user 1999/03/12 (金) 02:37
そうそう、GNUのtouchを参考にするのもいいかも。

http://www.gnu.org/software/software.html
TheFileutilsare:`chgrp',`chmod',`chown',`cp',`dd',`df',`dir',`dircolors',`du',
    `install',`ln',`ls',`mkdir',`mkfifo',`mknod',`mv',`rm',`rmdir',`sync',`touch',and`vdir'.

ちょっと見てみた感じでは、こっちもstdinは見てなさげです。

> これは全く意外でした(^^;
うーん、でもtouchというコマンドの性質から言って、
stdinを読まないのは自然ではないかと思います。

しかしこうして見ると、GNUってすごくたくさんのソフトを
保守してますねぇ。CVSもGNUだったのか。

No. 173 # Asano [E-mail] 1999/03/12 (金) 10:54
はじめまして。Asanoと申します。
私のUNIX歴は1年ぐらいの初心者です。
UNIX Userの雑誌のバックナンバー(1995年12月号)を
探しています。お持ちの方で、譲ってもいいよいう人が
おりましたら、下記アドレスまでご連絡お願いします。
付録のCD−ROMは無くてもかまいません。

よろしくお願い致します。
E-Mail asanonet@po.anoa.or.jp

No. 174 # いわもと 1999/03/12 (金) 13:29
こんにちは。いわもとです。
68Userさん、M.Masudaさん、ありがとうございました。
おかげさまでうまく動かすことが出来ました。
UNIX歴わずか数日の私には本当にありがたい限りです。
今後ともよろしくお願いします。

No. 175 # mm 1999/03/12 (金) 21:14
>えっと、これはUNIXの話ですか?
あっ、すいません、UNIXの話です。
MS-DOSでは、シェルが展開するようなことはなく、
常にそのままコマンドに引数として渡ります。

>…と、mmさんなら知ってそうなことを書いてしまった。
いえいえ、
>これはシェルがtouchを実行する前にはじいてます。
というのは、全く知りませんでした(^^;

昨日、
    for ( i = 0; i < argc; i++ )
        printf("%d: %s<BR>\n",i,argv[i]);
というようなソースをウチのサーバーでccして test.cgi
として、perl CGI内で open(FH,"./test.cgi *.txt 2>&1 |");
という感じで実行してみたら(*.txt は存在しない)、
    0: ./test.cgi<BR>
    1: *.txt<BR>
となったので、以前に「シェルは、マッチしなかった場合に
そのままコマンドに渡す」という話を聞いたことがあるのを
思い出して、あんな風に書いたのです。
(なお、ウチのHPのシェルは、sh のようです(^^;)

ちなみに、この test.cgi をCGIとして実行すると、
    0: wrapper_daigaku
なんてのが返って来ました。daigakuってなんだぁ…?


>DOSってgrobの展開は各プログラムの担当ですよね。
そうですが、MS-DOS流の * や ? は、そのままファイル検索
システムコール(FindFirst)に渡すことで、マッチする
ファイル名を返してくれます(2番目以降はFindNextで順に
呼び出します)。

>そういうときに便利な関数ってライブラリで用意されてるんでしたっけ。
正式に用意されているって話は聞いたことありませんです。
フリーのライブラリを探せばあったのかな…、少なくとも
定番というのもなかったと思います。
ただ、私が昔パソコン通信(PC-VAN)で覗いてたSIG(フォーラム)
では、みんな、ツールのソースをPDSとして公開してたので、
誰かがDOS版findを作ったら、この中のcsh風glob matchの
Cソースを利用して、他の誰かが別のツールを作ったりとかは
してました。

>files = filelist("a:\dir\a*.txt");
これは、上のFindFirstとFindNextを使って簡単に実現できるので、
ライブラリとしてあるかどうかは知りません。
でも、"a:\{dir,f*}\[ab]*.txt"を解釈するようなものは、
何かのソースから取ってきて自由に利用可能でした。

もっとも、MS-DOSの世界では、フリーウエアのソースは
普通未公開だし、NiftyではPDS自体が毛嫌いされてた
みたいだから、こういうことは一般的ではなかったかも知れません。
んな訳で、Win32版でもそういうライブラリがあるのかどうか
知らないし、ましてDelphiのObjectPascalでそういうものが
ある雰囲気もあまりしないので(regexpはあるみたいです)、
今回はgetoptから全部手作りでした(^^;

>そうそう、GNUのtouchを参考にするのもいいかも。
覗いてみます。
FreeBSDのサイトもそうですが、ネット上で古いバージョンも
含めて全部公開されているんですね。やっぱ、こういう風に
ソースに自由にアクセスできるUNIX環境は羨ましいです。

>うーん、でもtouchというコマンドの性質から言って、
>stdinを読まないのは自然ではないかと思います。
何か勘違いしてるのかなぁ(^^;
例えば、ファイル名を引数にとって、そのファイルを処理する
コマンドcommand がある場合に、ls ... | command とか
find ... | command で引数ファイルを渡すのは普通では
ないのでしょうか?
確かに、ls * | cat だと、ファイル名が素通りするだけですね…

No. 176 # M.Masuda 1999/03/12 (金) 22:43
>FreeBSDの場合は/etc/crontabを書き換えると自動的に反映されます
>(1分ごとに書き換えられたかどうかチェックされてる)。
http://X68000.startshop.co.jp/~68user/unix/prgmemo.html#crontab
ここに書いてありましたね。(^^ゞ
すいませんでした。
#確認せずに発言は止めましょうの見本みたいでしたm(_ _)m

ところで、あるアカウントに来たメールをきっかけにスクリプト
やCGIを実行させるってのはどうすれば実現できるのでしょう?
forword辺りに仕掛けをするんでしょうか?

#download.cgiの件は解決しましたでしょうか?

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