68user's page 掲示板

Prev< No. 4983〜5076> Next  [最新発言に戻る] [過去ログ一覧]
No. 4983 # 68user 2009/04/06 (月) 11:36:31
>>4982 ちびヴァル
オプション -lX11 が足りていません。まずは
    http://x68000.q-e-d.net/~68user/xprogram/xlib-1.html
からどうぞ。

No. 4984 # 68user 2009/04/06 (月) 11:37:59
>>4980 べた
> 「epoch time」とはなんでしょうか。
http://oku.edu.mie-u.ac.jp/~okumura/php/date.php
    UNIX で Epoch とは,協定世界時(UTC,いわゆるグリニッジ標準時 GMT)
    1970 年元旦 0 時 0 分のことです。 UNIX の内部ではこの瞬間からの秒数で
    時刻を表しています。
のことです。

No. 4985 # ちびヴァル [URL] [E-mail] 2009/04/06 (月) 14:46:01
>>4983 68user

一通り実行して終了させると次の文章が出るんですが……
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
            after 16 requests (14 known processed) with 0 events remaining.

自分で調べて、etc/X11/xorg.confというファイルにが重要であると
わかったので、xorg.confに
Section "ServerFlags" Option "AllowEmptyInput" "off" EndSectionを
追加しようとしていますが、普通のテキストエディタでは
「そのファイルを保存するために必要な権限がありません。入力した場所が正しいか確認して、もう一度実行してみて下さい。」
と出て保存出来ないのですが、どうすればいいでしょうか?
また、コマンドプロンプトでも試して見ましたが、
E325: ATTENTION
Found a swap file by the name "/etc/X11/.xorg.conf.swp"
                    owned by: root dated: Mon Apr 6 14:37:03 2009
                  file name: /etc/X11/xorg.conf
                    modified: YES
                  user name: root host name: mikan
                process ID: 8021
While opening file "/etc/X11/xorg.conf"
                          dated: Thu Mar 5 23:15:04 2009

(1) Another program may be editing the same file.
        If this is the case, be careful not to end up with two
        different instances of the same file when making changes.
        Quit, or continue with caution.

(2) An edit session for this file crashed.
        If this is the case, use ":recover" or "vim -r /etc/X11/xorg.conf"
        to recover the changes (see ":help recovery").
        If you did this already, delete the swap file "/etc/X11/.xorg.conf.swp"
        to avoid this message.
"/etc/X11/xorg.conf" 33 lines, 1037 characters
と出てどうすればいいか迷っています

No. 4986 # 68user 2009/04/07 (火) 23:39:02
>>4985 ちびヴァル
> Found a swap file by the name "/etc/X11/.xorg.conf.swp"
vim が作成したスワップファイルでしょうから、.xorg.conf.swp を
削除して、root 権限で xorg.conf を更新すればよいと思います。

No. 4988 # べた 2009/04/11 (土) 14:29:40
>> 4978

> find . -newer foo の方法を書いておきます。find を使わないなら、
> 昨日9時の日時 (20090323090000) を Time::Local で epoch time に
> 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう

の方法を教えて欲しいのですが。

No. 4989 # べた 2009/04/21 (火) 20:16:51
Bシェルで、sedを使って、フルパスからディレクトリとファイル名を
分割したいのですが良い方法を教えてください。

ファイル名を取り出すことは出来たのですが、パス名を取り出すこと
ができません。
また、ルート直下「/txt.csv」のような場合だと、ファイル名が取り出せ
ません。結果が、「/txt.csv」となってしまいます。「txt.csv」と
したいのです。


------------------------------------
FILE=/aaa/bbb/txt.csv
echo ${FILE} | sed 's/\/.*\///g'

FILE=/txt.csv
echo ${FILE} | sed 's/\/.*\///g'

FILE=txt.csv
echo ${FILE} | sed 's/\/.*\///g'


環境は、
    Solaris8
    Bシェル

No. 4990 # 68user 2009/04/22 (水) 03:06:48
>>4989 べた
basename・dirname コマンドを使うのはダメですかね。

No. 4991 # べた 2009/04/22 (水) 08:52:24
>>4990 68user

>basename・dirname コマンドを使うのはダメですかね。
も考えましたが、
出来れば、使わない方法でと

No. 4992 # zsh 2009/04/22 (水) 11:56:48
>>4991 べた
普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。

sed でやりたいならこんな感じかなぁ?
- ファイル名
echo ${FILE} | sed 's/.*\///g'
- パス名
echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'

No. 4993 # べた 2009/04/22 (水) 12:12:04
>>4992 zsh

> 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。
すみません。

> - パス名
> echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'
が、上手くいきませんでした。
パス名がとれません。フルパスが返ってきます。

/aaa/bbb/txt.csv → /aaa/bbb/txt.csv
/txt.csv → /txt.csv

No. 4994 # べた 2009/04/22 (水) 12:15:00
>>4992 zsh

> 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。
すみません。

> - パス名
> echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'
が、上手くいきませんでした。
パス名がとれません。フルパスが返ってきます。
それと、ファイル名のみ場合は、値がなしとしたいのですが。

/aaa/bbb/txt.csv → /aaa/bbb/txt.csv
/txt.csv → /txt.csv

No. 4996 # zsh 2009/04/22 (水) 17:14:30
>>4994 べた
失礼しました。↓でどうでしょうか?

echo ${FILE} | sed -n -e 's#\(.*\)/[^/]*#\1#p'

No. 4997 # べた 2009/04/22 (水) 19:10:04
>>4996 zsh
ありがとうございます。
パス名を取り出すことができました。
ただ、以下の様に場合、上手くいきません。

「FILE=/txt.csv」の場合
    「/」となりません。
    ブランクというか、改行します。
    「/」だけ取り出すというのは無理なのでしょうか。

「FILE=txt.csv」の場合
    ブランクとなります。
    正しい動きなのでしょうか。

No. 4998 # ふくし 2009/04/22 (水) 22:39:27
nawkのユーザ定義関数について教えて下さい。

nawkで、ユーザ定義関数を呼び出して編集を行っているのですが、
ユーザ定義関数内で編集した値を、パラメータで渡した変数に設定
して返却したいのでが値が返却されません。
ユーザ定義関数内では、渡した変数に値が設定されているのですが、
関数を抜けると値が設定されていません。
どうしてなのでしょうか。
それとも、無理なのでしょうか。
パラメータで渡した変数に設定して返すことができるのでしょうか。

環境
    OS:Solairs8
    シェル:Bシェル(sh)

--------------------------------------------------------------
nawk -v OUT=${OutFile} -F"," '
        BEGIN {
                count = 0+0;
        }
        function chk2(arg1,arg2,val) {
                sub(/^"*/,"",arg1); sub(/"*$/,"",arg1);
                sub(/^"*/,"",arg2); sub(/"*$/,"",arg2);
                val=sprintf("%s %s",arg1,arg2);
        }
        function chk1(arg1,val) {
                sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); val=arg1;
        }
        {
                chk1($1,UserID);
                chk2($8,$9,Name);

                printf("%s,%s\n",UserID,Name);
                #printf("%s,%s\n",UserID,Name) >> OUT;
                count++;
        }
        END {
                printf("Output number : %d\n",count);
}' ${FILE}

No. 4999 # zsh 2009/04/23 (木) 11:23:01
>>4997 べた
> 「FILE=/txt.csv」の場合
パス名末尾の / を出力しないようにしていたためですね。

echo ${FILE} | sed -n -e 's#\(.*/\)[^/]*#\1#p'

こうすれば出力されると思いますが、
逆に /hoge/fuga.txt のような場合でも /hoge/ となります。

> 「FILE=txt.csv」の場合
パスが指定されていないので、ブランクで正しいと思っていますが。
(そういった条件もありませんでしたし。)

>>4998 ふくし
nawk は参照渡しできないはずなので、そういう書き方ではできません。
ただ nawk では、ユーザ関数の引数として定義された変数を除き、
すべてグローバル変数だと思うので、やろうとしていることはできます。

No. 5000 # べた 2009/04/23 (木) 13:10:32
>>4997 べた

ありがとうございました。
出力されました。

No. 5001 # べた 2009/04/23 (木) 13:19:29
>>4999 zsh

お礼先誤りですみません。
ありがとうございます。


>> 「FILE=txt.csv」の場合
> パスが指定されていないので、ブランクで正しいと思っていますが。
> (そういった条件もありませんでしたし。)

No. 4994で、自分でファイル名のみの場合、値なしとしたいと
書いておきながら正しい動きなんですかと質問すみませんで
した。

No. 5002 # sfish 2009/04/23 (木) 14:46:19
>>4998 ふくし

えっ、Solairs8 の nawk って return を使えないんでしょうか?

No. 5003 # zsh 2009/04/23 (木) 15:58:34
>>5002 sfish
man には
return [expr]
と記載があったので、リターンコードを返すものだと思っていましたが、
確かに値を返すことも出来ました。こっちの方がいいですね。

No. 5004 # ふくし 2009/04/23 (木) 21:06:27
>>4999 zsh

> ただ nawk では、ユーザ関数の引数として定義された変数を除き、
> すべてグローバル変数だと思うので、やろうとしていることはできます。
どういうことでしょか。
nakwで関数を作るのが不慣れなもので、

nawk内で定義した変数はグローバル変数なので、nawk内であれば、
ユーザ定義関数でも参照や書き換えができるということでしょうか。
また、
ユーザ定義関数ないで定義した変数は、関数内でしか有効とならない
ということでしょうか。
例などを載せてくれるとありがたいのですが。

No. 5005 # zsh 2009/04/27 (月) 17:13:54
>>5004 ふくし
> nawk内で定義した変数はグローバル変数なので、nawk内であれば、
> ユーザ定義関数でも参照や書き換えができるということでしょうか。

その通りです。

ただ、
>>5002 sfish
で return で値が戻せることを教えて頂いたので
関数側は、
---------------------------------
function chk1(arg1) {
        sub(/^"*/,"",arg1); sub(/"*$/,"",arg1);
        return arg1;
}
---------------------------------
のようにして、呼び出し側は
---------------------------------
UserID = chk1($1);
---------------------------------
とすれば、やろうとしていることができると思います。

No. 5006 # まえ [E-mail] 2009/04/28 (火) 09:07:23
初歩的な質問ですが

内蔵HDDを増設し「label:Backup」として、クリックしますと「sdb」と表示されています。
プロパティで、場所は/mntとなっています。

このHDDに mv /home/ormaster/123.txt sdb/123.txt とファイルの移動をしたいのですが方法を教えてください。

No. 5007 # ふくし 2009/04/28 (火) 12:01:40
>>5005 zsh

ありがとうございます。

No. 5008 # 山田洋子 [E-mail] 2009/04/28 (火) 21:29:44
エラーメッセージ「cannot execute binary 」についての質問。

以前にservice sendmail start 2<&1 | /bin/mail -s "件名" wenbi@akw.com.cn
というコマンドを実行して、正常です。

しかし、下記のコマンドを実行して、「cannot execute binary 」というエラーメッセージを出ました。
この後、上記のコマンドを実行しても、エラーを出ます。
service sendmail start infile.txt
iconv -f EUC-JP -t Shift_JIS infile.txt < infile2.txt
cat infile2.txt | /bin/mail -s "件名" wenbi@akw.com.cn

No. 5009 # 68user 2009/05/07 (木) 13:40:49
>>5006 まえ
mount 済みであれば、mv /home/ormaster/123.txt /mnt/123.txt で
いけるのではないかと思います。

>>5008 山田洋子
よくわかりませんが、cannot execute binary のエラーメッセージを
出力しているのが service コマンドなのか、iconv コマンドなのか、
cat や mail なのかを調べてみてはどうでしょうか。

No. 5010 # ふくし 2009/05/23 (土) 00:01:56
nawkでsystem関数で、コマンドを実行しています。
今、system関数で実行したコマンドの結果を変数
に格納したいのですが、結果のステータスが格納
されて、コマンドの実行結果が格納できません。
どうしてなのでしょうか。そもそも不可能なのでしょうか。

system関数で、dateコマンドを実行し、結果を変数に
格納して、nawk内で使用したいのです。

nawk '{system("date +%Y%m%d")}'

環境は、
Solaris8
bsh
です。

No. 5011 # 68user 2009/05/23 (土) 01:06:30
>>5010 ふくし
system は単なるコマンドの実行であり、コマンドの標準出力を受け取るような
仕組みになっていません。この場合は getline を使うべきかと思います。

No. 5013 # ふくし 2009/05/23 (土) 10:59:31
>>5011 68user

ありがとうございます。
上手くいきました。

No. 5017 # keiji [E-mail] 2009/05/27 (水) 15:07:21
完全ガイドwindowsxp基本+Q&A 2008,3,20
p275,Q057 
1・アイコンの数を増やすは、あるが、減らす方法が、無い。

2・初心者に解かるように、教えて。やり方がわからへん。

No. 5018 # keiji 2009/05/27 (水) 15:14:43
特定のアイコンを消す方法です。

No. 5020 # たろう 2009/06/21 (日) 03:05:55
はじめまして

ネットワークプログラミングのページは
とってもためになりました。

・読みやすい
・わかりやすい
・内容がある

すばらしいです。

少なくとも私の嗜好とあうはず。
なので、
おすすめ書籍を紹介してください!

・実践的にアプリケーションを作る
・複数ファイルのビルドを説明
・winコンポーネント
・プロセス間通信
・管理人さんのように読みやすく、わかる、内容がある
・ネットワークアプリ(サーバー、メーラーetc)
・c言語、perl、php(windows

いま、プロキシサーバと、メールサーバに興味があるので、
それが作れるような本。(あくまでわかりやすく言ってます)
ぜひ、よろしくお願いします。

No. 5021 # 68user 2009/07/04 (土) 15:59:26
>>5020 たろう
すべての要求を満たす本はニッチすぎて存在しないと思います。
特にサーバはニーズがあまりなく、深く掘り下げるほど単なる
RFC の解説になってしまうため、書籍としては成立しづらいのかも
しれません。

とはいえ、いくつか提示してみます。

○UNIXネットワークプログラミング入門
        http://www.amazon.co.jp/-/dp/4774117544

    この本は持っていませんが、前身である
        UNIXネットワーク・ベストプログラミング入門
            http://www.amazon.co.jp/-/dp/4874085032
    は持っています。書評は
        http://x68000.q-e-d.net/~68user/net/link-book.html
    に書いてあります。

○Perlネットワークプログラミング―ソケットの使い方から
    クライアント/サーバーシステムの開発まで
        http://www.amazon.co.jp/-/dp/4894714655

    買っていませんが、目次を見ると結構範囲は広いようです
    (700ページもあるから当然か…)。深く突っ込んでいるかは
    わかりません。

○基礎からわかるTCP/IP ネットワーク実験プログラミング
        http://www.amazon.co.jp/-/dp/4274065847

    アプリレイヤではなく TCP/IP 寄りですが、結構おもしろいことを
    やっていて勉強になります。読みやすいかというと、個人的には
    ちょっとつらいです (一枚の複雑な図があって、それを長い文章で
    解説するのは無理がある。まぁ書籍だから仕方ないかもしれませんが)


あとは、いずれも持っていませんが、
    オンラインゲームプログラミング
        http://www.amazon.co.jp/-/dp/4797328479

    MMORPGゲームサーバープログラミング
        http://www.amazon.co.jp/-/dp/4797328460
といったアプローチもアリかもしれません。

No. 5022 # たろう 2009/07/11 (土) 12:20:20
>>5021 68user

68userさん。
お返事ありがとうございます。


なんだがいろいろ調べていただいたようで、ありがとうございます。
(68userさんは上級者なんでしょうね)

linuxシステムプログラミング
http://www.amazon.co.jp/Linux%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%9E%B0%E4%BA%95-%E6%AD%A3%E9%9B%84/dp/4274079724/ref=sr_1_2?ie=UTF8&s=books&qid=1247282246&sr=1-2

(私の知りたいことは「プロセス間通信」で、「システムプログラミング」って範疇に入るんだなぁ)

これでも読んでみようかと思ってます。

プロセス間通信がわかれば、
数あるソフトウェアを自在に連携して使いこなすことができるる!」

こう思っているが、合ってますでしょうか。(^−^;)

No. 5023 # 68user 2009/07/27 (月) 16:21:59
>>5022 たろう
共有メモリなどのプロセス間通信は、同一サーバ内のプロセスで
データをやりとりする仕組みで、他サーバとはやりとりができません
(とはいえ MySQL や PostgreSQL なども使っている重要な機能ですが)。

複数クライアントからの情報をサーバ内で効率よく共有するためには
役立つのは確かでしょうが、多くのマシンで連携するクラウドばやりの
昨今では、学習の方向性としてはちょっとずれているかもしれません。

No. 5024 # 鈴木 [E-mail] 2009/08/26 (水) 01:28:17
68userさん はじめまして、鈴木と申します。

SSLクライアント接続のプログラムを作成していた友人から
「SSL_connect() を実行すると -1 が返る。」という相談を受けて、調べている中で、
68userさんの下記ページの、RAND_seed() の説明で解決することができました。

http://x68000.q-e-d.net/~68user/net/ssl-1.html

本当にありがとうございました。

今回、書き込みさせていただいたのは、その続きなのですが
もし、ご存知でしたら教えていただけないでしょうか。


【質問の内容】
  (1)XPでは、RAND_seed()を実行しなくても、乱数の種が不足することはないのでしょうか?
  
  (2)ユーザプログラムでRAND_seed()実行しない場合、OpenSSLは、OS(Windows)からどのようにして
        乱数の種を取得するのでしょうか?

  以下に、質問に至った経緯を記します。

【友人との話の経緯】

当初、前述の友人が作成したRAND_seed()していないSSLクライアントプログラムを
私の環境(WindowsXP Pro(SP2))で実行しても、SSL_connect()ではエラー(-1)は
発生しませんでした。

友人の環境を確認するとWindowsNT4.0ワークステーション(SP3)でした。
どうしても、この古い環境でSSLクライアント接続のプログラムを動かしたいとのこと。

結局、友人の環境(WindowsNT4.0ワークステーション(SP3))では発生しますが、
私の環境(WindowsXP Pro(SP2))では100回ほどテストしましたが発生しませんでした。

  
【試した内容】

  前述の内容を下記にまとめます。

    (友人の環境) WindowsNT4.0ワークステーション(SP3):× SSL_connect() ⇒ (-1)が返る
    (私の環境) WindowsXP Professional(SP2) :○ SSL_connect() ⇒ 正常

    どちらも、PCの電源オン後に自動ログインして、SSLクライアントプログラムを
    自動起動するようにしています。
    使っているOpenSSLのバージョンは私も友人も0.9.8Gです。


    という経緯があって、以下の点についてご存じであれば教えていただけないでしょうか。

    ・XPでは、RAND_seed()を実行しなくても、乱数の種が不足することはないのでしょうか?
    ・ユーザプログラムでRAND_seed()実行しない場合、OpenSSLは、OS(Windows)からどのようにして
        乱数の種を取得するのでしょうか?

  何卒よろしくお願い致します。
    

No. 5025 # 68user 2009/08/26 (水) 11:01:56
>>5024 鈴木
Windows に詳しくないので直接の回答はできませんが、
    - 前提として、RAND_poll(3) は呼んでいますか?
    - プログラムの各部分に RAND_status(3) を実行し、
        seed の状況を確認することで、何を行うと十分な
        seed がたまるか確認できるのではないでしょうか。
    - Windows 用の RAND_poll(3) や RAND_add(3) のソースは
            http://cvs.openssl.org/fileview?f=openssl/crypto/rand/rand_win.c&v=1.46
        にありますので、眺めてみてはどうでしょうか。
    - RAND_seed(3) は最終的には RAND_add(3) を呼ぶ…と思うのですが、
        ソースを見てもそのつながりがよくわかりませんでした。
と思いました。

No. 5027 # sep 2009/09/20 (日) 20:34:31
UNIXの初歩的なことですみません。

UNIXで、viを使用するときシェルの環境変数の設定などは
必要なのでしょうか。

cronを編集しようとして、「crontab -e」を実行したの
ですが、正しく表示されませんでした。
「crontab -l」では、正しく見れます。
環境変数のEDITORに、”vi”を設定し、「crontab -e」を
行うと、正しく表示されます。

ここでなのですが、unixにログインし、コマンドラインから、
viを起動すると問題なく使用できるのですが、ログインの場合
環境変数のEDITORは関係ないのでしょうか。
それとも、そういうものなのでしょうか。

環境は、
solaris8
bシェル

No. 5028 # zsh 2009/09/22 (火) 12:08:17
>>5027 sep
環境変数 EDITOR は、単に vi(vi コマンド)を使用する場合には
必要ありません。
crontab コマンドのように、エディタを選択できるプログラムが
参照します。
http://x68000.q-e-d.net/~68user/unix/environment.html#EDITOR

なお、crontab コマンドでは、EDITOR が設定されていない場合は
ed コマンドで編集画面が開きます。

No. 5029 # y-hira 2009/11/03 (火) 01:44:42
はじめまして

POP3 クライアントを作ってみよう(3) のページにて

> APOP はその原理上、必ずサーバ側に生パスワードを保存しておく必要があります。...
> CRAM-MD5 や CRAM-SHA などの認証方法がありますが、サーバ側に生パスワードを保存しておく必要はありません。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

とありますが、CRAM-MD5 (や DIGEST-MD5) は生パスワードを
サーバ側が保持していなければならないと理解しておりましたが如何でしょうか?

サーバーは,認証の際に 「クライアントから受信した文字列(暗号化済み)」と,
「送信したChallengeコードと(サーバー側の)『ユーザのパスワード』をMD5で暗号化したもの」を
比較する必要がありますので...。

No. 5030 # 68user 2009/11/04 (水) 13:56:53
ご指摘ありがとうございます。勘違いしていたようです。
以下のように修正いたしました。

http://x68000.q-e-d.net/~68user/net/pop3-3.html
- 一方 IMAP というプロトコルには APOP と似た認証の仕組みとして、
- CRAM-MD5 や CRAM-SHA などの認証方法がありますが、サーバ側に
- 生パスワードを保存しておく必要はありません。

+ SMTP や IMAP には APOP と似た認証の仕組みとして、CRAM-MD5 や、
+ それを改善した DIGEST-MD5 などの認証方法がありますが、こちらも
+ 同様にサーバ側に生パスワードを保存する必要があります。

No. 5031 # スパムと戦う掲示板 [URL] [E-mail] 2009/11/09 (月) 23:36:27
管理人様、失礼いたします。

この度、私の運営する掲示板への度重なるスパム書き込みに対する対策を行っております。

つきましては、せっかくなら私のサイトだけに囚われず
一般の皆様にも使用していただけた方が良いかと思い
絶対に荒らされない掲示板サービスを立ち上げようと考えております。

スパムに悩まされない掲示板に興味が御座いますでしょうか?
また、使っていただける皆様と共同して随時機能を追加して参ります。

掲示板サービスに対するご要望があれば、
下記のメールアドレスにご連絡いただければ
追って準備が整い次第、お知らせをさせていただきます。
掲示板サービス以外のメールは、一切送信いたしません。

antispambbs@gmail.com

それでは、貴重なスペースをありがとう御座いました。
書き込み内容がサイト内容とそぐわない場合は、
大変お手数ですが削除いただきますようお願いいたします。

失礼いたします。

No. 5040 # あきもと 2010/01/18 (月) 23:55:19
Bシェルで、whileとreadを使ったファイルからの読み込み
について教えてください。

while文の中の変数をwhile文の外で使いたいのですが、
以下の様に、whileとreadを使ってファイルから読み込み
doをdoneの間で処理を行い、ループを抜けた後、doneの
後ろで、結果を表示させたのですが、正しく表示されません。

どうしたら正しく表示されますか。

環境
    Solaris8
    Bシェル

---------------------------------------------------------
#!/bin/sh
#

num=0

while read line ; do
        echo $line
        num=`expr $line + $num`
done < a.txt

echo "-----"
echo $num


cat a.txt
1
2
3
4
5
6
7
8
9
10

No. 5041 # おう 2010/01/19 (火) 01:28:56
Bシェルで、sedを使って、2行を1行にしているのですが上手く行きません。

改行している次の行で、半角スペースから始まっている行を、sedを使って
1行にしたいのです。

sed -e ':loop' -e '$b' -e 'N;/\n /{s/\n *//;b loop' -e '};P;D;b loop' file.txt

としたのですが、最初に引っかかったのは、1行になるのですが、
それ以降のものは、1行になりません。

環境
    Solaris8
    Bシェル

内容
---------
[Fri Jan 1 00:00:00] 開始
[Fri Jan 1 00:00:00] INFO:あいうえお
  abcdefg
[Fri Jan 1 00:00:00] INFO:あいうえお
    1234567890
[Fri Jan 1 00:00:00] INFO:あいうえお
                    aaaaaaa bbbbbb cccccc
[Fri Jan 1 00:00:00] INFO:あいうえお
        ABC 1234
[Fri Jan 1 00:00:00] INFO:12345
[Fri Jan 1 00:00:00] INFO:ABCDE
[Fri Jan 1 00:00:00] INFO:あいうえお
[Fri Jan 1 00:00:00] 終了

期待する結果
----------
[Fri Jan 1 00:00:00] 開始
[Fri Jan 1 00:00:00] INFO:あいうえお abcdefg
[Fri Jan 1 00:00:00] INFO:あいうえお 1234567890
[Fri Jan 1 00:00:00] INFO:あいうえお aaaaaaa bbbbbb cccccc
[Fri Jan 1 00:00:00] INFO:あいうえお ABC 1234
[Fri Jan 1 00:00:00] INFO:12345
[Fri Jan 1 00:00:00] INFO:ABCDE
[Fri Jan 1 00:00:00] INFO:あいうえお
[Fri Jan 1 00:00:00] 終了

実際の結果
---------
[Fri Jan 1 00:00:00] 開始
[Fri Jan 1 00:00:00] INFO:あいうえお abcdefg
[Fri Jan 1 00:00:00] INFO:あいうえお
    1234567890
[Fri Jan 1 00:00:00] INFO:あいうえお
                    aaaaaaa bbbbbb cccccc
[Fri Jan 1 00:00:00] INFO:あいうえお
        ABC 1234
[Fri Jan 1 00:00:00] INFO:12345
[Fri Jan 1 00:00:00] INFO:ABCDE
[Fri Jan 1 00:00:00] INFO:あいうえお
[Fri Jan 1 00:00:00] 終了

となります。
期待する結果を得たいのですが、どうすればよいですか。

No. 5042 # zsh 2010/01/21 (木) 17:14:43
>>5040 あきもと
>>4776 zsh
を参照してください。

>>5041 おう
sed -e '$!N; s/\n \{1,\}//; P; D' file.txt
でどうでしょうか?

No. 5045 # h.maruwa 2010/01/23 (土) 03:47:25
管理人さんへ
『User-Agent 統計』のページ
(http://x68000.q-e-d.net/~68user/cgi-bin/view-browser.cgi)
が『エラー : 内部エラーが起こりました。』となっているので
お知らせします。

No. 5047 # あきもと 2010/01/23 (土) 17:10:34
>>5042 zsh

ありがとうございます。
教えて頂いたところに書いてある方法で
上手くいきました。

No. 5048 # おう 2010/01/23 (土) 20:18:10
>>5042 zsh

ありがとうございます。
上手くいきました。

No. 5049 # ボンジー 2010/01/26 (火) 20:30:18
はじめまして。ボンジーと申します。ハッキングのやり方を教えてください。しーローとなもので

No. 5056 # Misaki [URL] [E-mail] 2010/02/14 (日) 21:05:38
いつもUNIXコマンドでお世話になっています。

画像変換のconvertコマンドについてお伺いしたいことがあります。

私は今、趣味でサイトを作っています。
画像アップロードした際にGIFからjpgに変換させる処理にconvertを使っているのですが、
ファイル名の拡張子は.jpgになっているのですが、バイナリエディタで開いて確認するとGIFファイルのままです。

convertはImageMagickダウンロードしてきて新規インストールしたものです。

このページではGIFからJPGへの画像変換を紹介されていたのですが、
私のところと同じような現象がおこっていませんでしょうか。
http://x68000.q-e-d.net/~68user/unix/pickup?keyword=convert&target=command

No. 5057 # 68user 2010/02/15 (月) 16:38:19
>>5056 Misaki
そういう事象は聞いたことがないですが、ありうることとしては
libjpeg のリンクがうまくいっていない、でしょうか (それにしても
エラーが出るのではないかと思うのですが)。

変換前後のファイルを file コマンドで調べても、やはり gif でしょうか?

No. 5059 # Misaki [E-mail] 2010/02/16 (火) 16:13:19
>> 5057
早速、回答ありがとうございます。
fileコマンドでgifかどうか判別できるんですね!
やってみたところGIFでした。

簡単に調べてみましたがlibjpegが上手く入っていなかったようです。
帰ったらもうちょっと詳しく調べてみます。

ldd結果
$/usr/bin/ldd /usr/local/bin/convert
                linux-gate.so.1 => (0x00110000)
                libMagickCore.so.3 => /usr/local/lib/libMagickCore.so.3 (0x00111000)
                libMagickWand.so.3 => /usr/local/lib/libMagickWand.so.3 (0x00427000)
                libz.so.1 => /usr/lib/libz.so.1 (0x0059a000)
                libpthread.so.0 => /lib/libpthread.so.0 (0x005af000)
                libdl.so.2 => /lib/libdl.so.2 (0x0056b000)
                libgomp.so.1 => /usr/lib/libgomp.so.1 (0x00523000)
                libm.so.6 => /lib/libm.so.6 (0x00571000)
                libc.so.6 => /lib/libc.so.6 (0x005c6000)
                /lib/ld-linux.so.2 (0x0040c000)
                librt.so.1 => /lib/librt.so.1 (0x0081e000)

No. 5060 # かばら 2010/02/16 (火) 22:18:08
初めまして。かばらと申します。
現在、マシン間のソケット通信に関して勉強中なのですが、connectシステム
コールについて質問させていただきいても宜しいでしょうか。

質問1
クライアント側から発行されるconnect()はサーバー側で発行されるaccept()の
ように処理をロックすることがあるのでしょうか。もしあるとすればどの
タイミングでコールした場合でしょうか。

質問2
サーバー側がlisten()をコールする以前にクライアント側でconnect()をコール
するとエラー(返却値-1)が起きますが、クライアントがサーバーの状態を監視し、
connect()をコールするタイミングを得ることは可能でしょうか。
(試しにselect()を使用してみましたが上手くいきませんでした。)

突然の不躾な質問で申し訳ございませんが、何卒ご教授くださいますよう
よろしくお願いいたします。

No. 5061 # 68user 2010/02/17 (水) 19:51:13
>>5059 Misaki
> 簡単に調べてみましたがlibjpegが上手く入っていなかったようです。
これはまたシンプルな convert ですね。ウチでは以下のとおりです。

/usr/local/bin/convert:
                libMagick.so.10 => /usr/local/lib/libMagick.so.10 (0x28073000)
                libWand.so.10 => /usr/local/lib/libWand.so.10 (0x283c7000)
                libjbig.so.1 => /usr/local/lib/libjbig.so.1 (0x28479000)
                liblcms.so.1 => /usr/local/lib/liblcms.so.1 (0x28484000)
                libtiff.so.4 => /usr/local/lib/libtiff.so.4 (0x284b1000)
                libjasper.so.4 => /usr/local/lib/libjasper.so.4 (0x284fe000)
                libjpeg.so.9 => /usr/local/lib/libjpeg.so.9 (0x28548000)
                libpng.so.5 => /usr/local/lib/libpng.so.5 (0x28566000)
                libfpx.so.1 => /usr/local/lib/libfpx.so.1 (0x2858b000)
                libdpstk.so.1 => /usr/X11R6/lib/libdpstk.so.1 (0x2862b000)
                libdps.so.1 => /usr/X11R6/lib/libdps.so.1 (0x28633000)
                libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x2867a000)
                libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x28689000)
                libbz2.so.1 => /usr/lib/libbz2.so.1 (0x286da000)
                libxml2.so.5 => /usr/local/lib/libxml2.so.5 (0x286e9000)
                libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x28818000)
                libfreetype.so.9 => /usr/local/lib/libfreetype.so.9 (0x28907000)
                libz.so.2 => /lib/libz.so.2 (0x28971000)
                libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x2897f000)
                libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x28988000)
                libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x2899f000)
                libm.so.2 => /lib/libm.so.2 (0x28a67000)
                libc.so.5 => /lib/libc.so.5 (0x28a80000)
                libstdc++.so.4 => /usr/lib/libstdc++.so.4 (0x28b5a000)

>>5060 かばら
> 質問1
> クライアント側から発行されるconnect()はサーバー側で発行されるaccept()の
> ように処理をロックすることがあるのでしょうか。もしあるとすればどの
> タイミングでコールした場合でしょうか。
「connect はブロックするか」(connect を発行した後、待たされることはあるか)
という趣旨でよいですかね。ざっと考えつくところは、
    1. 3way handshake が完了するまでブロックする
    2. サーバもしくはサーバ側ルータにて一切のレスポンスを返さない
          構成の場合、いつまでたっても返事がないので SYN を送り続け、ブロックする
    3. サーバ側で処理しているソケット数が SOMAXCONN を超えていた場合、
          滞留しているクライアントの処理が終わるか、タイムアウトになるまで
          ブロックする
    4. サーバ側が listen しているが accept していない場合、ブロックする
などなど。3・4 は記憶に頼って書いてますので、本当かどうかは自信がないです。

一方、ノンブロッキングソケットで connet すれば、ブロックしません。

> 質問2
> サーバー側がlisten()をコールする以前にクライアント側でconnect()をコール
> るとエラー(返却値-1)が起きますが、クライアントがサーバーの状態を監視し、
> connect()をコールするタイミングを得ることは可能でしょうか。
> (試しにselect()を使用してみましたが上手くいきませんでした。)
サーバ側で準備が整ったら通知がくるといった仕組みはないので、リトライ
し続けるしかないですね。

No. 5062 # Misaki 2010/02/18 (木) 12:41:07
お礼遅くなりました。

libjpegを入れて再インストールしたらちゃんと変換されました。
私ははgifの取り扱いに失敗しているものだと勘違いしていました。

迅速かつ的確な回答ありがとうございました。

No. 5063 # かばら 2010/02/18 (木) 22:32:12
ご回答ありがとうございます。
質問1、2共に納得です。

大変お世話になりました!

No. 5071 # Mods [E-mail] 2010/05/13 (木) 10:22:57
はじめまして、Mod's(マスター・オブ・ドヘン○イ)と申します。
困った時に参考にさせて頂いております。

Bシェルスクリプトを独学中です。と言いつつBashの環境設定ファイルとサブシェル
(詰まる所はプロセスの理解不足)について質問させてください。

利用環境:MacOSX 10.6
ログインシェル:Bash
    bash-3.2$ bash --version
    GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)


元々はログインシェルがBashの利用環境にてログイン過程のシェル起動や以降のシェル起動による
環境設定ファイルの読み込み順序などを調べる為に/etc/profile、/etc/bashrc、~/.bash_profile、
~/.bashrcの4つにそれぞれechoコマンドを仕込んで実際にそれらログインスクリプトが起動した
時に任意のファイルへ「読み込みました」的な内容の出力をするようにしました。

結果、ログイン時にはそれら全ての環境設定から出力されその後のBashの起動では~/.bashrcから
のみ出力があり、ここまでは予想通りでした。
グローバル環境設定ファイル、およびローカル環境設定ファイルのいずれもprofile側からrc側を
sourceしています。

ここまでは良いのですが、カレントシェルからシェルスクリプトを実行した際、私の予想では
~/.bashrcから出力を得られるつもりでいました。シェルスクリプトを実行する際にサブシェルを
起動すると「されている(←私の中で未確定)」わけですから。

従いまして下記のように2つ推測を立ててみました(どちらも外れているかもしれませんが:笑)。
<推測>
    推測&#9312; :新たにシェルは起動している、しかし。
    スクリプト実行によるサブシェルはあくまでスクリプトを実行するシェルであって対話シェル
    として起動しているわけではないのでローカル環境設定ファイルを読み込む必要がない。
    言い換えると環境設定ファイルはあくまでログインスクリプトだから。

    推測&#9313; :新たにシェルは起動していない。
    あくまでスクリプトを解釈するのはカレントシェルであって解釈後の実際の処理はシェルの
    起動を伴わない子プロセスが実行するから。

推測&#9313;を書いていてふと思ったのですが、1つのプロセスというのは同時に一つの事しか出来ない
「はず」で、カーネル視点から考えるとシェルとしてプロセスを起動した以上は入力されたコマンド
を自身が理解出来る命令へ翻訳して受け取るための1プロセス。
そして翻訳された命令を受け取ったカーネルは実際のデータ処理実行でまた次の1プロセスを育成。
つまり、こちらはカーネル上のデータ処理のプロセスであってシェルの起動ではない。

よってカレントシェルからのスクリプト実行の処理というのはカレントシェルがスクリプト内の
コマンドを翻訳してカーネルが翻訳された命令を受け取って子プロセスが育生されるので~/.bashrcは
読み込まれない。

つまり、「サブシェルが起動する」というのはカレントシェルのプロセス上でデータ処理が行われる
訳ではないということを便宜的に説明するための「考え方」でしかないのか?

と、以上までのような推測を立ててみました。
個人的にはこのように考えるとcronからのスクリプト実行でも環境変数を~/.bashrcから読み込ま
ない事にも合点がいくのですが。。。
もっともcronプロセスはログインプロセスとは全くべつのプロセスなので環境変数で引き継ぐも
なにもないのですがシェルが起動するということを中心に考えると、むぅ〜ん、という感じです。

どちらにせよ、~/.bashrcをシェルスクリプト実行時に起動させたければsourceすれば良いだけの
ことですが、一般的な説明としてスクリプト実行には新たにシェルが起動しているという説明と
~/.bashrcが起動しない結果が自分の中で噛み合ないので質問させて頂きました。

psコマンドを使いこなせていれば良いのだろうなぁと思いつつ。いきなりの長文で失礼しました。

http://x68000.q-e-d.net/~68user/unix/pickup?keyword=%A5%B5%A5%D6%A5%B7%A5%A7%A5%EB&target=command

No. 5072 # 68user 2010/05/14 (金) 13:19:29
>>5071 Mods
bash(1) 曰く、
    ~/.bash_profile
            個人用の初期化ファイル。ログインシェルが実行します。
    ~/.bashrc
            対話シェルごとに実行される、個人用の起動ファイル。
です。

対話的シェルの定義は、同じく bash(1) 曰く
      対話的なシェルとは、オプションでない引数がなく、標準入力と
      標準出力がいずれも端末に接続されていて (これは isatty(3)
      で調べられます)、 -c オプションが指定されていない状態で起動
      されたシェル、または -i オプション付きで起動されたシェル
      のことです。
です。

シェルスクリプトは
    http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B7%A5%A7%A5%D0%A5%F3%A5%B0
にあるように、結果的には
    /bin/bash ./foo.sh
などと起動されるので、
    「オプションでない引数がなく」
に該当しないため、対話的シェルではありません。よって、
    ~/.bashrc
            対話シェルごとに実行される、個人用の起動ファイル。
は読み込まれません。

また、シェルスクリプト起動の場合はログインシェルでもないので、
    ~/.bash_profile
            個人用の初期化ファイル。ログインシェルが実行します。
も読み込まれません。

以上が仕様上の話です。

で、なぜそういう仕様かと言うと、シェルスクリプトが個人用の
設定を参照してしまうと都合が悪いからです。例えばこちらの手元の
CentOS 5.3 において /usr/bin/* のうちシェルスクリプトである
ものは、以下のようにかなりあります。

/usr/bin/apr-config
/usr/bin/apropos
/usr/bin/apu-config
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/bashbug-32
/usr/bin/build-classpath
/usr/bin/build-classpath-directory
/usr/bin/build-jar-repository
/usr/bin/bzcmp
/usr/bin/bzdiff
/usr/bin/bzgrep
/usr/bin/bzless
/usr/bin/bzmore
/usr/bin/c89
/usr/bin/c99
(略)

これらが実行されるたびに ~/.bash_profile などを呼んでしまうと、
alias・シェル変数・関数などがプログラム作成者の意図に反したもの
であった場合、おかしな挙動をしてしまうでしょう。それを避けるために
こういう仕様になっているものと思います。

上記のプログラムの挙動をカスタマイズしたい場合は、アプリ個別の
設定ファイル (~/.*rc) や、環境変数で指示すべき、ということですね。

> 個人的にはこのように考えるとcronからのスクリプト実行でも
> 環境変数を~/.bashrcから読み込まない事にも合点がいくのですが。。。
cron 経由だと端末を持たないので対話的シェルではないから、
~/.bashrc を読まない、です。この結果、
      ログインシェル・対話的シェルと、cron 経由のシェルで
      共通の環境変数を設定する方法がない
となってしまい、仕様としてはイマイチだと個人的には思っていますが、
世の人達は cron で
      HOGE=fuga
      * * * * * $HOME/bin/foo.sh
としたり、
      * * * * * . $HOME/.bash_profile && $HOME/bin/foo.sh
としたり、
      $HOME/bin/foo.sh 内で必要な環境変数を設定する
などの方法で乗り切っています。

環境変数であれば FreeBSD だと /etc/login.conf で設定する方法
もありますが、Mac OS X だとどうなのかはわかりません。

> 一般的な説明としてスクリプト実行には新たにシェルが起動しているという説明と
> ~/.bashrcが起動しない結果が自分の中で噛み合ないので質問させて頂きました。
シェルは起動していますが、~/.bashrc などを読むべき条件が
揃っていない、ということですね。

No. 5073 # Mods [E-mail] 2010/05/14 (金) 17:19:22
>>5072 管理人様

早速のご回答を頂きましてありがとうございます!
cronの説明も含め非常にスッキリいたしました。

スクリプト実行によるシェル起動プロセスが~/.bashrcを読み込まない件に関しては最初の
推測が近かったものの「ローカル環境設定ファイルを読み込む必要がない。」のではなく
むしろ「読み込んではまずい。」ということだったのですね。
その理由も言われてみれば非常に納得です。

この度は詳細な解説をして頂き、まことにお世話になりました(感謝感激です)。

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