68user's page 掲示板

Prev< No. 4891〜4929> Next  [最新発言に戻る] [過去ログ一覧]
No. 4891 # べた 2008/03/26 (水) 15:09:22
perlの使い方なのですが、

日付と時間を表示する簡単なものを作りました。
実行したら動いたのですが、ところが、下記のような
メッセージが出ました。

------------------------------------------------------------
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
                LC_ALL = (unset),
                LANG = "ja_JP.PCK"
        are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
------------------------------------------------------------

このメッセージを表示させないようにするには、どうしたらよいか
教えてください。

環境は、Solari8

以下、perlのシェルスクリプト
------------------------------------------------------------
#!/usr/local/bin/perl
#

($day, $mon, $year) = (localtime(time))[3..5];
printf("Today : %04d/%02d/%02d\n",$year+1900,$mon +1,$day);

($sec, $min, $hour) = (localtime(time))[0..2];
printf("Time : %02d:%02d:%02d\n",$hour,$min,$sec);
------------------------------------------------------------

No. 4892 # maya 2008/03/26 (水) 18:52:55
>>4889 68user

なるほど。ここらへんはzipやrarなどと比べると不便ですね。
ありがとうございました。

No. 4893 # 68user 2008/03/26 (水) 18:54:47
>>4891 べた
「perl: warning: Setting locale failed」で検索すれば出てきますが、
環境変数 PERL_BADLANG を設定することで回避可能です。詳細は検索願います。

No. 4894 # つのりん [E-mail] 2008/03/26 (水) 19:31:35
>4889
ありがとうございます。ヤフーのオークション
で見てみます。

No. 4895 # べた 2008/03/27 (木) 11:29:44
>>4893 68user

ありがとうございます。

perlのスクリプトを実行時のみ有効にしたいのです。
perlのスクリプト内で記述する場合はどのように
定義すればよいのですか。

No. 4896 # 68user 2008/03/27 (木) 11:44:00
>>4895 べた
perl コンパイルの際の Configure 時に設定する方法があります。

それが無理なら
    #!/bin/sh
    PERL_BADLANG=0 /foo/bar/baz.pl
と wrapper を作るか、env コマンドで
    #!/usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl
とする手もあります。

No. 4897 # べた 2008/03/27 (木) 12:55:00
>>4896 68user
ありがとうございます。

#!/usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl
#

とperlのスクリプト内に記述して、実行したのですが、
処理がとまったというか、何も応答が返ってきません。

No. 4898 # 68user 2008/03/27 (木) 23:05:24
>>4897 べた
なるほど FreeBSD 5.2.1-RELEASE では動きますが、Linux では確かに
無限ループしてますねぇ。

> #!/usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl
これは FreeBSD 5.2.1-RELEASE では
    /usr/bin/env PERL_BADLANG=0 /usr/local/bin/perl ./hoge
と解釈されますが、Linux や Solaris では
    /usr/bin/env "PERL_BADLANG=0 /usr/local/bin/perl" ./hoge
となるため
    PERL_BADLANG="0 /usr/local/bin/perl"
という環境変数が設定されつつ
    /usr/bin/env ./a
が実行されるものの、./hoge のシェバング行にはまた同じ内容が
書かれているため、永遠に
    execve("./a");
が実行されるということですね。

参考:
    http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B7%A5%A7%A5%D0%A5%F3%A5%B0
    の Tips.2

というわけで env コマンドを使うやり方は移植性がありませんでしたが、
    #!/bin/sh
    PERL_BADLANG=0 /foo/bar/baz.pl
なら動くと思います。Linux では動きました。

No. 4899 # べた 2008/03/28 (金) 12:53:23
>> 4898

> #!/bin/sh
> PERL_BADLANG=0 /foo/bar/baz.pl
>なら動くと思います。Linux では動きました。
で動きました。

色々とありがとうございました。

No. 4900 # 68user 2008/04/02 (水) 19:10:27
さきほどお問い合わせページよりご指摘いただきました、ジャンル一覧リンク切れの件、
修正しました。ご指摘ありがとうございます>連絡いただいた方

No. 4901 # 68user 2008/04/18 (金) 13:53:44
2年半ぶりの人材募集です。
http://x68000.q-e-d.net/~68user/tmp/job2.html

No. 4902 # TKC 2008/05/02 (金) 14:09:57
こんにちわ。
findコマンドについて教えてください。

■要件
カレントディレクトリに存在する31日以前のファイル&ディレクトリの削除を実施したい

■コマンド
find ./ -mtime +31 -exec ls {} \; -exec rm -r {} \; >> test.log

■結果
./20070101.trc
find: ./aaa: No such file or directory

■質問1
カレントディレクトリに削除対象となる日付のファイル20070101.trcとディレクトリaaaを配置しています。
削除ファイルの一覧を取得したいため-exec ls {} \;を使用したのですが、
ログには./20070101.trcしか記載がありません。
ディレクトリも表示させるには何かオプションが必要なのでしょうか?

■質問2
実行結果としては削除は行われているのですが戻り値がエラーとなっています。
find: ./aaa: No such file or directoryの部分を指していると思うのですが、
削除後にfindしているように見受けられますがこのエラーの出力原因はなんでしょうか?

1と2の解決方法がありましたら教えてください。
宜しくお願いします。

No. 4903 # 68user 2008/05/02 (金) 16:00:22
>>4902 TKC
まず、-exec の代わりに -ok を使って何が実行されているか確認しましょう。

> ディレクトリも表示させるには何かオプションが必要なのでしょうか?
./aaa/ の中身が空ではないですか? 空であれば ls ./aaa しても何も
表示されないと思います。

> 削除後にfindしているように見受けられますがこのエラーの出力原因は
> なんでしょうか?
find はディレクトリを下降してファイルを探しますが、おそらく
ディレクトリを削除した後にそのディレクトリに下りようとしている
のではないでしょうか。-prune を組み合わせれば下りないように
できるかもしれません (試していません)。

No. 4904 # TKC 2008/05/02 (金) 16:38:38
>>4903 68userさん
-okを使用して確認しました。
ご察しの通り./aaa配下が空のため< ls ... ./aaa >となり
結果的にログに./aaaが出力されていないことがわかりました。

findのエラー原因はやはり削除後に配下に移動しているものと思われます。
rmにデータが渡る前に-pruneを使い解消されました。

最終的には下記で行いたい処理ができました。
find ./ -mtime +31 -prune -exec ls -d {} \; -exec rm -r {} \;

どうもありがとうございました。

No. 4906 # hoge 2008/05/19 (月) 00:21:11
いつもこちらにはお世話になってます。

flexについての指摘です。
http://x68000.q-e-d.net/~68user/unix/pickup?flex

GNUでは作成・配布してないようです。
http://ftp.gnu.org/gnu/flex/flex.README

No. 4907 # 68user 2008/05/19 (月) 23:44:38
>>4906 hoge
> GNUでは作成・配布してないようです。
そうなんですか。知りませんでした。

ftp://ftp.gnu.org/non-gnu/flex/flex.README
      Flex is a free implementation of the well-known Lex program for lexical
      analysis. Since it is not (and never was) a GNU package, we don't
      distribute it here. Please see http://flex.sourceforge.net for the
      latest release and information.

や
flex-2.5.4 (1997年リリース) の README
      Note that flex is distributed under a copyright very similar to that of
      BSD Unix, and not under the GNU General Public License (GPL), except for
      the "configure" script, which is covered by the GPL.

などを見るに、確かに flex が GNU ではないようですね。

しかしこの書籍
    http://www.ascii.co.jp/books/books/detail/4-7561-3097-6.shtml
        Flex入門
        シリーズ:GNUシリーズ
        GNUのツールの1つとして広く使用されているGNUのLexical Scanner Generatorで
        あるFlexの解説書。豊富な例とともに機能を詳細解説
はどうなんですかね。

wikipedia(en) には
    http://en.wikipedia.org/wiki/Flex_lexical_analyser
        Flex is a non-GNU project, but the GNU project developed the manual for Flex.
とありますが、「GNU が作った flex のマニュアル」の翻訳が上記の「Flex 入門」
だったりするんでしょうか。

No. 4908 # 68user 2008/05/19 (月) 23:57:23
>>4907 68user
うーん、やはり 2.5.3 以前は GNU だったのだろうか。

http://cocoa.2ch.net/unix/kako/970/970914036.html より
----- ここから -----
Flex はそもそも non-gnuに移動になって、
下の Flex 2.5.4の COPYING みたいなことになっている。
-=-=-=-=-
Flex carries the copyright used for BSD software, slightly modified
because it originated at the Lawrence Berkeley (not Livermore!) Laboratory,
which operates under a contract with the Department of Energy:

Copyright (c) 1990 The Regents of the University of California.
All rights reserved.

This code is derived from software contributed to Berkeley by
Vern Paxson.

The United States Government has rights in this work pursuant
to contract no. DE-AC03-76SF00098 between the United States
Department of Energy and the University of California.

Redistribution and use in source and binary forms with or without
modification are permitted provided that: (1) source distributions
retain this entire copyright notice and comment, and (2)
distributions including binaries display the following
acknowledgement: ``This product includes software developed by the
University of California, Berkeley and its contributors'' in the
documentation or other materials provided with the distribution and
in all advertising materials mentioning features or use of this
software. Neither the name of the University nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.

This basically says "do whatever you please with this software except
remove this notice or take advantage of the University's (or the flex
authors') name".

Note that the "flex.skl" scanner skeleton carries no copyright notice.
You are free to do whatever you please with scanners generated using flex;
for them, you are not even bound by the above copyright.
----- ここまで -----

「non-gnu に移動」という記述はいろんなところにあるが、それを根拠に
「以前は GNU だった」と言いきれない。古い tarball も見つからないし…。

No. 4909 # 68user 2008/05/24 (土) 14:05:02
>>4908 68user
> うーん、やはり 2.5.3 以前は GNU だったのだろうか。
flex-2.5.2/COPYING を確認しましたが、
>> 下の Flex 2.5.4の COPYING みたいなことになっている。
とほぼ同じでした。よって、以前は flex は GNU であったが、
ある時点から GNU でなくなった、などという事実はないようです。

No. 4910 # 68user 2008/05/24 (土) 14:40:56
>>4907 68user
> http://www.ascii.co.jp/books/books/detail/4-7561-3097-6.shtml
> Flex入門
> シリーズ:GNUシリーズ
後はこれだけが気になってしょうがないので、アスキーに「なぜ GNU シリーズなのか」という
問い合わせを投げました。返事来るといいなぁ。

# その前に訳者と思われる方にメールを投げたものの、user unknown で返ってきました。

No. 4912 # hoge 2008/05/30 (金) 00:10:44
問題を投げっぱなしにしてすいません。
PHPのコンパイルに必要だったので探していただけで、
flexについては全く知らないんです^^;

> 「GNU が作った flex のマニュアル」の翻訳が上記の「Flex 入門」
> だったりするんでしょうか。

http://www.gnupress.org/book11.html
GNU Press「Flex: The Lexical Scanner Generator」

http://www.asahi-net.or.jp/~wg5k-ickw/html/online/flex-2.5.4/flex_1.html
訳者の方による、「Flex入門」と同内容のページだと思われます。

ISBNの記述から、ご推察のとおり
「GNU が作った flex のマニュアル」の翻訳が「Flex 入門」
だと考えますが、いかがでしょうか。

No. 4913 # BK 2008/06/04 (水) 14:02:24
http://x68000.q-e-d.net/~68user/net/net-1.html
の[ホスト名とは?]を読んでいましたら、http//133.8.2.24/でhttp//www.cs.gunma-u.ac.jp と同じページが表示されるはずですと
なっていますがが、http//133.8.3.11/でないと表示されないように思います。参考にさせて頂いています。

No. 4914 # 68user 2008/06/13 (金) 10:00:15
>>4912 hoge
flex については更新しております。ご指摘ありがとうございます。
http://x68000.q-e-d.net/~68user/unix/pickup?flex

「GNU シリーズ」についてはアスキーより回答をいただいたのですが、
残念ながら Web での公開は不可とのことなので、墓場まで持っていき
たいと思います。

>>4913 BK
ありがとうございます。取り急ぎ IP アドレスのみ更新しました。

No. 4915 # べた 2008/07/04 (金) 21:17:12
shで、文字列から文字列を取り出そうとしています。

”aaa.bbb@test.cojp”
から「@」より前と後を、

”aaa.bbb"
と
”@test.co.jp”
を取り出したいのです。
どのようにすれば良いか教えてください。

No. 4916 # 68user 2008/07/08 (火) 20:45:49
>>4915 べた
変数 $email にメールアドレスが入っているなら、こんな感じでしょうか。

$ echo $email | sed 's/\(.*\)@.*/\1/'
aaa
$ echo $email | sed 's/.*\(@.*\)/\1/'
@bbb.com

No. 4917 # findusi [URL] [E-mail] 2008/07/08 (火) 21:13:16
耶� 闔逅珥蓚�� 鰲鉗 闔頏琺, 褌辣�邇 聽 � 繝� 硴繿� � 驟痳 � 艢裨珞褂 � 鱚閻顫 袱聹�� 鞐� 癈糂 繝� 闔驟�瑩�. 吭鉗 闔頏琺 粮髓鉗迯�� 硴蓐琿�� � 辣 鴈譛褌 � �瑜鱶 褌迺纃鰰, 邇 � 關鉐鴈 � 矼驟謗竡 銓鉋跌纃��. �鞳粳珮珱 闔驟鱶鴾 <a href=http://www.find-business.ru>跪�</a> 闔頏琺

No. 4918 # べた 2008/07/08 (火) 22:44:17
iconvについて教えてください。

Solaris8で、iconvコマンドを使用しています。
今、使用している環境に、iconvコマンドが2つ入っています。

1./usr/local/bin/iconv
2./usr/bin/iconv

1と2は日付、サイズが異なり、1の方が、日付が新しく、サイズも大きいです。
環境変数のパスも両方設定されていて「usr/local/bin」のパスが
先あるので、whichコマンドで調べると、1の方を表示します。

シェルから、iconvを実施したいのですが、どちらの方を使えば
よいのですか。
iconvとしてどうちがうのでしょうか。機能的にも違うのでしょうか。

1./usr/local/bin/iconv の場合
    コマンドがエラーとなった場合、statusに、”0”か”1”が返る。

    # /usr/local/bin/iconv -f SJIS -t UTF8 sjis_file.txt > utf_file.txt
    iconv: conversion to UTF8 unsupported
    # echo $?
    1
    #

2./usr/bin/iconv の場合
    コマンドがエラーとなった場合、statusが、”0”となる。
    エラーも表示されない。

    # /usr/bin/iconv -f SJIS -t UTF8 contact_SJIS.txt > uft_file.txt
    # echo $?
    0
    #

シェルから、iconvを実施したいのですが、どちらの方を使えば
よいのですか。
iconvとしてどうちがうのでしょうか。機能的にも違うのでしょうか。

環境は
    Solaris8
    sh(Bシェル)

No. 4919 # べた 2008/07/08 (火) 22:55:38
>4916
ありがとうございます。

expr index "${email}" @
や
echo ${email} | awk '{ print substr($0,1,index($0,"@")-1)}'
や
ANS=`echo ${email} | awk '{printf "%s",index($0,"@")}'`
「@」が最初に現れた位置を取得して、cut で取り出し
echo ${email} | cut -c1-`expr ${ANS} - 1`
echo ${email} | cut -c`expr ${ANS} + 1`

awkや、1回で取り出したかったので、expr でやったのですが、
expr index の形式使えないので、awkでやったのですが、

sed で置換する方法は気が付きませんでした。
ためして見ます。

No. 4920 # 68user 2008/07/09 (水) 01:38:42
>>4918 べた
/usr/local/bin/iconv は GNU の libconv 同梱の iconv コマンド、
/usr/bin/iconv は Solaris 標準の iconv コマンドではないかと
思います。

GNU 版であれば、--version オプションを使うことで
    % iconv --version
    iconv (GNU libc) 2.3.4
    Copyright (C) 2005 Free Software Foundation, Inc.
    (略)
といった表示が得られるかと思います。

以下は Solaris 版と GNU 版の違いであったとして、という前提ですが、

機能差で選ぶなら↓を比較 (昔の Solaris 版 iconv は、不正なバイト列が
あった場合即終了だった気がするのですが、現在はスキップという選択肢も
選べるんですかね? であればそれほど機能差はないかも)
    http://docs.sun.com/app/docs/doc/819-1210/6n3j74jpk?a=view
    http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html

エンコーディングの多さで選ぶなら、/usr/local/bin/iconv -l と
/usr/lib/iconv/iconv_data を比較。特に CP932 や UTF-8 などが絡む
場合は、手持ちの全ファイルを変換して結果を調べるくらいはやった
方がよいかと思います。

後は GNU が好きか、Solaris の世界で固めるのが好きか、でしょうか。

No. 4921 # zsh 2008/07/09 (水) 10:09:43
>>4919 べた
expr や cut でもできますよ。
(cut の場合は @ が付きませんが。)

$ expr $email : '\(.*\)@.*'
$ expr $email : '.*\(@.*\)$'
$ echo $email | cut -d '@' -f 1
$ echo $email | cut -d '@' -f 2

>>4918 べた
Solaris には標準で /usr/local というディレクトリがないので、
68user さんの仰るとおりだと思います。

No. 4923 # べた 2008/07/10 (木) 22:27:06
>>4921 zsh
ありがとうございます。

exprやcutでの使い方ありがとうございます。
勉強になります。

No. 4924 # べた 2008/07/10 (木) 22:28:12
WindowsXP IE6.0 SP2 の別の端末から書き込みを
おこなったら以下のエラー画面が表示されました。

何かインストールされていないものがあるのでしょうか。


エラー : 内部エラーが起こりました。
http://x68000.q-e-d.net/%7E68user/cgi-bin/wwwboard.cgi の実行ができませんで
した。
おそらくCGIプログラムの不具合が原因です。

もし、こちらのファイル設定ミス・リンクミス・CGI の不具合などが原因であった場
合は早急に修正します。

の画面が表示されます。

No. 4925 # べた 2008/07/10 (木) 22:36:19
>>4918 べた
>>4921 zsh

説明ありがとうございます。

それでなのですが、ステータスが返ってくるということで、
「/usr/local/bin/iconv」を使っています。
Bシェルで実行しています。
iconvコマンドをパイプでつないで、連続で実行しています。

/usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt

1回目のiconv(パイプの左側のiconv)がエラーとなったとき、
ステータスがエラーで返ってきません。
エラーを判断したいのですが、どのようにしたらエラーと判断
できるでしょうか。

/usr/local/bin/iconv -f SJIS -t UTF8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt
echo $?

iconv: conversion to UTF8 unsupported
0

”0”が返却。

/usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF16 > file_utf.txt
echo $?

iconv: conversion to UTF16 unsupported
1

”1”が返却。

No. 4926 # べた 2008/07/12 (土) 01:29:32
>>4923 べた

ありがとうございます。

$ expr $email : '\(.*\)@.*'
$ expr $email : '.*\(@.*\)$'
$ echo $email | cut -d '@' -f 1
$ echo $email | cut -d '@' -f 2

どれでも、取り出せました。

No. 4927 # 68user 2008/07/20 (日) 03:21:17
>>4925 べた
> 1回目のiconv(パイプの左側のiconv)がエラーとなったとき、
> ステータスがエラーで返ってきません。
> エラーを判断したいのですが、どのようにしたらエラーと判断
> できるでしょうか。
bash なら PIPESTATUS を使えばよいですが、sh であれば
終了ステータスは取得できないと思います。しょぼいですが、
パイプを使うのをやめるのがよいかと思います。

>>4924 べた
> WindowsXP IE6.0 SP2 の別の端末から書き込みを
> おこなったら以下のエラー画面が表示されました。
IP アドレスや発言内容などから SPAM と判定されたのかもしれません。
特に判定精度の高いものではないので、頻発するようならご連絡ください。

No. 4928 # べた 2008/07/22 (火) 21:53:41
>>4927 68user

ありがとうございます。
sh できないんですね。
出力結果がなければ、出力結果をパイプで渡さなければ
「&&」でいけるのでないかと覆いますが。

パイプを使わず個々に行います。

No. 4929 # べた 2008/07/30 (水) 00:39:04
Solaris8 なのですが、「/var/log/syslog」に、
TCPコネクションのログを出力させたいのです。
telnet、ftpなど、接続したログを出力したいの
です。
どのようにすればよいのでしょうか。

「/etc/syslog.conf」には、以下の様な記述をしています。

user.notice /var/log/syslog

syslogのデーモンも再起動したのですが、出力されません。

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