子プロセスが終了しないNo.00950
立文字 さん 00/01/19 17:34
 
過去の発言も調べたのですが、runやリダイレクトがらみで問題
があるようなのですが、よくわからないので教えてください。
Windows98で秀丸ver3.01を使っています。
秀丸のマクロで、sedを使うために
  selectall;
  $sedprg = input("実行するSEDファイル名は?",$sedprg);
  run "sed.exe -f " + $sedprg +" <con >con";
  CHANGENAME;

としています。

で、その結果、SEDで変換された内容にかわるのですが、[実行中]
で、ファイル名横のアイコンが点滅したままなのです。
一度、その新しい秀丸をクリックしてやり、「プログラムを実行
を中断しますか」というダイアログでOKをクリックしてやら
ないと次のCHANGENAMEコマンドに進めません。

複数開いている秀丸に対して、同一のSEDを実行していきたいので
ここで一々止まるのがやっかいなのです。
何が問題なのでしょうか、また、回避するとすればいい方法が
ありますでしょうか。
よろしくお願いします。

立文字

[ ]
RE:00950 Re:子プロセスが終了しないNo.00954
ENCODINGSHIFTJIS さん 00/01/20 15:03
 
>過去の発言も調べたのですが、runやリダイレクトがらみで問題
>があるようなのですが、よくわからないので教えてください。
>Windows98で秀丸ver3.01を使っています。
>秀丸のマクロで、sedを使うために
>  selectall;
>  $sedprg = input("実行するSEDファイル名は?",$sedprg);
>  run "sed.exe -f " + $sedprg +" <con >con";
>  CHANGENAME;
>
>としています。
>
>で、その結果、SEDで変換された内容にかわるのですが、[実行中]
>で、ファイル名横のアイコンが点滅したままなのです。
>一度、その新しい秀丸をクリックしてやり、「プログラムを実行
>を中断しますか」というダイアログでOKをクリックしてやら
>ないと次のCHANGENAMEコマンドに進めません。
>
>複数開いている秀丸に対して、同一のSEDを実行していきたいので
>ここで一々止まるのがやっかいなのです。
>何が問題なのでしょうか、また、回避するとすればいい方法が
>ありますでしょうか。
>よろしくお願いします。
>
>立文字

こちらのwin95 では正常動作します。大して役に立ちませんが
l.sed -------------------------
y/a/A/
sedtest2.mac -----------------
//selectall    手動選択で動かしている
$sedprg = "d:\\l.sed";
$sedprg = input("実行するSEDファイル名は?",$sedprg);
run "D:\\sed118\\sed.exe -f " + $sedprg +" <con >con";
CHANGENAME
// AAAAAAAAAAAAAAAAAAAAAAAAaaaa  これはテストデータ
// ssssssssAAA
// AAAAAaaaaaa

// AAAAAAAAAAAAAAAAAAAAA[EOF]

「ファイル名横のアイコン」とは何ですか? 上の例は短いので直ぐ終わる。何も出
ない
>con でデータを受けるときの何かの設定かはわかりません。
後はsedが終了しないとか?^Z










[ ]
RE:00954 Re:子プロセスが終了しないNo.00955
ENCODINGSHIFTJIS さん 00/01/20 15:36
 
win95 でもタスクバー実行中の点滅になる場合がある。

dir.bat -------------------
@DIR %1 %2 %3 %4 %5
h.mac -------------------
run "dir.bat >con";

タスクバー[秀丸]実行中"dir.bat"-秀丸 がブリンク
表示は最終まで行っている。

.exe のフルパスファイル直接でない run (間に何かはさまる)のは
よくなさそうだ。
あまり助けにはなりませんが。



[ ]
RE:00954 Re:子プロセスが終了しないNo.00957
ENCODINGSHIFTJIS さん 00/01/20 17:32
 
>>過去の発言も調べたのですが、runやリダイレクトがらみで問題
>>があるようなのですが、よくわからないので教えてください。
>>Windows98で秀丸ver3.01を使っています。
>>秀丸のマクロで、sedを使うために
>>  selectall;
>>  $sedprg = input("実行するSEDファイル名は?",$sedprg);
>>  run "sed.exe -f " + $sedprg +" <con >con";
>>  CHANGENAME;
>>
>>としています。
>>
変更を最少にするなら、 >con 直接受け取りでなく一時ファイル経由ができます。

selectall
$sedprg = "d:\\l.sed";
$sedprg = input("実行するSEDファイル名は?",$sedprg);
run "D:\\sed118\\sed.exe -f " + $sedprg +" <con >%TMP%\\l";
delete  // selectallのままではinsertfileが動かない
insertfile "C:\\Windows\\Temp\\l";// %TMP% は利かない
CHANGENAME




[ ]
RE:00955 Re:子プロセスが終了しないNo.00958
ENCODINGSHIFTJIS さん 00/01/21 14:24
 
>win95 でもタスクバー実行中の点滅になる場合がある。
>
傾向かどうかはわからないが、 *.com プログラムの実行終了を
うまくキャッチしていないようだ。 >con 使用時
例:
秀丸メニュー その他(O)プログラム実行(X) で
mode.com /?
正常終了、ものによってはMS-DOSウィンドウが残ったりするが.pif修正可能
.pif ができてしまったら後で消したほうがよいかも。
mode.com /? <con
完了
mode.com /? >con
実行中 ctrl+alt+del でタスクの表示をすると 「完了−mode」で残っている
これを強制終了さても依然として秀丸は実行中。
この状態になるとプログラムによってはゴミがシステムに残りやすくなる。

more.com /? >con
同様です
command.com は別格だから同様と言えるかどうかわからない。

*.EXE の拡張子が付いていても中身はMS-DOSかWINかわからない。
ping.exe /? >con
Win プログラムの終了はOK.
protman.exe /? >con
ダメです MS-DOS プログラムの終了全般かな?

そちらのsed.exe をクイックビュアーで見たらどうですか?
でもNTですからね。



[ ]
RE:00958 Re:子プロセスが終了しないNo.00959
ENCODINGSHIFTJIS さん 00/01/21 17:37
 
>>win95 でもタスクバー実行中の点滅になる場合がある。
>>

 >con 受け取りはともかく、MS-DOSプログラムの終了はわかると思うが。

command.com /c DIR/OD >l.txt
MIFESの子プロセス実行では正常終了。
command.com /c more.com/? >l.txt
command.com /c protman.exe /? >l.txt
command.com /c ping.exe /? >l.txt
どれもちゃんと終了している。

   > リダイレクトのあるrunではWinプログラムしかうまくゆかない。

暫定の定説でいいでしょうか?
 .exe をクイックビュアーで確認。



[ ]
RE:00958 Re:子プロセスが終了しないNo.00960
杉浦 まさき さん 00/01/21 23:38
 
横から失礼します。
杉浦 まさき です。

>そちらのsed.exe をクイックビュアーで見たらどうですか?
>でもNTですからね。

が、精確には何を意味しておられるかは??ですが、
NT にもクイックビューアはあります&バイナリの種類は特定できます。

以下はただの報告なんですが…

run でコンソールアプリが変な動作をする件ですが、
どうも秀丸側の標準入出力のリダイレクト処理が
悪さをしているようだ、というのは経験的に感じています。
#というか Win32 API and/or subsystem の不具合だという気が
 何となくしますが(^^;。

前に秀丸マクロの run 文で実行した田楽鯖上で、
田楽鯖の run 文から DOS アプリが正常に実行できない、という
似た様な不具合を報告されたことがありました。
その時は田楽側で一度親プロセス(というか秀丸(^^;)から渡された
stdin/out をクローズしたらまともに動作するようになったんですが、
そのことから秀丸側の stdin/out のリダイレクト処理で
変なことが起こっているのでは?と推測しています。


[ ]
RE:00957 Re:子プロセスが終了しないNo.00961
立文字 さん 00/01/24 11:02
 
出張していてレスが遅れました。

>変更を最少にするなら、 >con 直接受け取りでなく一時ファイル経由ができます。
>
>selectall
>$sedprg = "d:\\l.sed";
>$sedprg = input("実行するSEDファイル名は?",$sedprg);
>run "D:\\sed118\\sed.exe -f " + $sedprg +" <con >%TMP%\\l";
>delete  // selectallのままではinsertfileが動かない
>insertfile "C:\\Windows\\Temp\\l";// %TMP% は利かない
>CHANGENAME

これでやってみましたが、insertfileコマンドの実行前に
"C:\windows\temp\lは他のプログラムが使用中等の理由により開けません"
というメッセージが出て止まります。
deleteの前でendmacroしてみましたが、windows\tempの中にlという
ファイルが存在しません。

[ ]
RE:00960 Re:子プロセスが終了しないNo.00962
立文字 さん 00/01/24 11:08
 
皆さん、コメントありがとうございます。
出張に出ていたので、お返事が遅くなりました。

>>そちらのsed.exe をクイックビュアーで見たらどうですか?
>>でもNTですからね。
sed.exeはDOSプログラムです。

杉浦さんの仰るとおり、
>どうも秀丸側の標準入出力のリダイレクト処理が
>悪さをしているようだ、というのは経験的に感じています。
>#というか Win32 API and/or subsystem の不具合だという気が
> 何となくしますが(^^;。

このへんが臭いような気がするのですが、まだ解決しません。

終了しないで、アイコンが点滅するというのは、タスクバーの
その秀丸のアイコンが点滅しているということです。

何かわかりましたら、引き続き教えてください。


[ ]
RE:00962 Re:子プロセスが終了しないNo.00963
ENCODINGSHIFTJIS さん 00/01/25 09:07
 
>sed.exeはDOSプログラムです。
>

では、WIN32版のSED.EXE を持ってくるしかないですね。
私はベクターで見つけました。
----------------
チョットこだわりの気分

@REM     年4桁表示の DIR 印刷
@DIR %1 %2 %3 %4 %5 >%TMP%\X
@D:\SED118\SED -e"s/ \(0[0-9]-\)/ 20\1/" -e"s/ \([1-9][0-9]-\)/ 19\1/" %TMP%\X
@NOTEPAD /P %TMP%\Y.


 ドライブ C: のボリュームラベルはありません.
 ボリュームシリアル番号は 365A-19E7
 ディレクトリは C:\Windows\デスクトップ

.              <DIR>        1997-05-19  11:25 .
..             <DIR>        1997-05-19  11:25 ..
CLIPBO~1 TXT         2,480  1999-12-17  11:43 CLIPBOARD3.txt
TRANS          <DIR>        1999-08-20  10:19 TRANS
.......

[ ]
RE:00961 Re:子プロセスが終了しないNo.00966
ENCODINGSHIFTJIS さん 00/01/25 19:05
 
>これでやってみましたが、insertfileコマンドの実行前に
>"C:\windows\temp\lは他のプログラムが使用中等の理由により開けません"
>というメッセージが出て止まります。
他のプログラムとはDOS版のsed.exeのことです。
sed.exeをwin版に取り替えましょう。

需要の多そうなdirコマンドはcygwin32をインストールするとよいと思います。
bin の.exeは全てwin版です dir.exe ls.exe mkdir.exe 等
その他/プログラム実行
C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\dir -l --full-time >con
正常動作です。
長いパス名は環境変数をセットすると使いやすいでしょう。
コマンドの日本語対応に注意すれば(テストしてから使う)安定しています。
binの.exeはcygwinのbashシェルの下だけでなく、MS-DOSプロンプトでも
動きます。たぶん普通のwinプログラムです。

</>

[ ]
RE:00966 Re:子プロセスが終了しないNo.00967
ENCODINGSHIFTJIS さん 00/01/26 09:18
 
追伸
PATH をcygwinのbinに通してcommand.com 内部コマンドと
同名の .exeを動かすには "" でくくります。
"dir.exe" -l
"dir" -l
"date.exe"
...
</>

[ ]
RE:00963 Re:子プロセスが終了しないNo.00968
ENCODINGSHIFTJIS さん 00/01/26 16:32
 
>>sed.exeはDOSプログラムです。
>>

// DosRun.mac
//    DOS プログラムを変更できないときは
//    選択範囲をfilesave して runsync で実行
//    insertfile で回収が一番順当でしょう。
//    >CON  の不調が直るまで。
//
$filename=filename;  // CANGENAME 用
changename "l";save // selectall <con と大体同じ感じ
runsync2 "command.com /c sed.exe -e's/e/E/g' <l >J";
selectall delete insertfile "J";// select 中はinsertfile はできない
changename $filename; CHANGENAME
//        
// runsync でも同じ、< > を効かせるためにcommand.com は必要
// command.com の .pif はウィンドウを出さないようにプロパティ変更
// したほうがよいと思う。
//
// ----------- その他
runsync2 "command.com /c dir >l";
gofileend escape; insertfile "l";// DIR の間接取り込み

endmacro

<allend/>

[ ]