リダイレクトの応用についてNo.00983
タラすけ さん 00/02/08 01:16
 
こんにちは。Mashuといいます。
リダイレクトの応用についてですが、
マクロ中でも「その他-プログラムの実行」
でもうまく動きません。具体的な症状は、
新規の秀丸に出力が表示されないのです。
秀丸を再インストールしても
OSを再インストールしてもだめでした。
環境は、Windows 98 Second Edtion + 秀丸V3.01です。
この会議室で同様の話題がすでに出ていたらすいません。
ちょっと探そうと思ったのですが何しろ膨大で・・・。



何をやろうとしていたかと言いますと、
perlのスクリプトを書いてその文法チェックを
秀丸上でやりたいということです。
以下のようなマクロを試みて
いるのですが・・・。

run "perl -c "+ filename + ">";

または他にいい方法どなたか知りませんか?

[ ]
RE:00983 リダイレクトの応用についてNo.00987
きいろいまふらあ さん 00/02/08 12:12
 
きいろいまふらあです。

run系詳しくないですが、
ヘルプの「リダイレクトの応用」のとこに詳しい説明がありますよ。

>run "perl -c "+ filename + ">";

">"の前に" "がない。
いや、そもそも" >"は不要なのでは?
filenameって現在編集中のファイル(の最後に保存された内容)?
バッファの最新の内容ではないし、競合とか気になる

1:現在編集中の内容を→"<con"を使う
2:perlに渡して
3:新規の秀丸に出力→自動判断してくれるらしい

ということで

run "perl -c <con";

なんてやったらどうなるんでしょ?
お試し下さい。多少進展あるかも。
念のためperlにパスは通ってます、よね?(^^;

[ ]
RE:00983 リダイレクトの応用についてNo.00988
ENCODINGSHIFTJIS さん 00/02/08 12:29
 
>
>run "perl -c "+ filename + ">";
>
>または他にいい方法どなたか知りませんか?

MS-DOSプロンプト でやったところ、 STDERRの方に出ているのでは?
STDOUT ではなく。
12:02 C:\Windows\TEMP\perl -c p.pl >k
p.pl syntax OK
で k は空でした。

run "d:\\perl\\bin\\perl.exe -c c:\\windows\\Temp\\p.pl >con";

-c オプションを付けると常に空ですから、そうでしょう。

STDERR も STDOUT にかぶせるようなリダイレクトができるシェルじゃ
ないと。
cygwin の bash は私はよく知らないので言えませんが。

[ ]
RE:00988 リダイレクトの応用についてNo.00989
ENCODINGSHIFTJIS さん 00/02/08 12:45
 
BASH.EXE-2.02$ perl -c p.pl >k 2>&1
BASH.EXE-2.02$ cat k
p.pl syntax OK
BASH.EXE-2.02$

2>&1 が効いてますからそうでしょう。さて秀丸では拾えるか?
素直な方法では
.BAT で BASH を起動する。その時の起動設定スクリプトの中で
perl -c ... を行いSTDERR をキャッチする
BASH が終わった後に、 .BAT で何とか >CON  する。かな??
もうやる気無し。

[ ]
RE:00988 リダイレクトの応用についてNo.00990
でるもんた さん 00/02/08 12:47
 
>STDERR も STDOUT にかぶせるようなリダイレクトができるシェルじゃ
>ないと。

Perl だけでなんとかなるかもしれません。
perl -e "open STDERR,'>&STDOUT'; exec 'perl -c temp.pl';"
といった具合です。

[ ]
RE:00990 リダイレクトの応用についてNo.00992
ENCODINGSHIFTJIS さん 00/02/08 15:00
 
>Perl だけでなんとかなるかもしれません。
>perl -e "open STDERR,'>&STDOUT'; exec 'perl -c temp.pl';"
>といった具合です。

Ruby も同様です。
ruby -e"$stderr.reopen($stdout);exec 'ruby -c fs.rb'" >h

Perl、 Ruby でもない場合は、djgpp の redir.exe があります。

redir.exe -eo  ruby -c \windows\temp\p.rb >l
redir   オプション コマンド らしい。



[ ]
RE:00987 リダイレクトの応用についてNo.00993
タラすけ さん 00/02/08 17:19
 
きいろいまふらあさんコメントありがとうございます。

>
>run系詳しくないですが、
>ヘルプの「リダイレクトの応用」のとこに詳しい説明がありますよ。
>
一応、その辺は、試行済みです。
(" >"入れたり入れなかったりfilenameを"<con"にしたしました。)
run "perl -c <con
もだめです。そもそも、秀丸ヘルプに記載されている、
command.com /c dir
の出力がでないのです。

[ ]
RE:00993 リダイレクトの応用についてNo.00994
きいろいまふらあ さん 00/02/08 18:45
 
>一応、その辺は、試行済みです。

失礼いたしました。
なんにしてもお呼びじゃなかったようですね。(^^;

[ ]
RE:00992 リダイレクトの応用についてNo.00996
タラすけ さん 00/02/08 21:04
 
でるもんたさん、ENCODINGSHIFTJISさんありがとうございました。
でるもんたさんのperlスクリプト(勉強不足で少々理解できません
でしたが)を利用して、例えば

run "perl -e \"open STDERR,'>&STDOUT'; eval 'perl -c "
+ filename + "';\" >error.txt";



run "perl -e \"open STDERR,'>&STDOUT'; eval 'perl -c "
+ filename + " >error.txt';\"";

等のマクロを試して見たのですが、駄目みたいです。
何か根本的に間違っているのかもしれません。


ただ、STDOUTではなくてSTDERRに出力されているということが、
ひとつの原因になっていることはわかってきました。
ただ、STDOUTに出力されているとしても
秀丸のリダイレクトはうまく行かないような気がします。
例えば、
run "perl -v ";
はうまく出力を得られませんが、
run "perl -v >error.txt";
openfile "error.txt";
とすればSTDOUTを見ることができます。
あと、
run "perl -v >con";
としても、新規の秀丸に出力結果が出てきました。
これは、解説と違うような気がします。


後は.BATかBASH等をを試して見ます。
(BASHUは面白そうですね。)
何かわかりましたらまた書き込みます。
いずれにしても皆様いろいろありがとうございました。







あと、いろいろ試して見ます。
何かわかりましたらまた投稿します。
皆様いろいろありがとうございました。






[ ]
RE:00996 リダイレクトの応用についてNo.01003
ENCODINGSHIFTJIS さん 00/02/09 15:00
 
>run   "perl -e \"open STDERR,'>&STDOUT';
> eval 'perl -c "+ filename + "';\" >error.txt";

eval の引数は Perl のスクリプト(ソース)文字列です。
シェル(コマンドインタープリタ)のスクリプトを与えてもダメでしょう。
exec の誤り。凄い perl(eval(perl)) 2.5重のPerl

DJGPP の redir.exe は単独で動かせます、普通の .exe です。
(DJGPP の環境を整えなくともよい。)MS-DOSの .exe なので
秀丸リダイレクトとの相性問題に引っかかるかも知れません。
DOS-EXTENDER も絡むから、試す精力無し。

run を試すのなら DOS窓の次に秀丸{その他/プログラム実行}
でテストしたほうが能率はよいでしょう。

>run "perl -v >con";
>としても、新規の秀丸に出力結果が出てきました。

選択範囲がある状態では新規にならず、置換されます。

insertfile もありますから 絶対 .>CON じゃないとダメでもないでしょう。






[ ]
RE:00983 リダイレクトの応用についてNo.01004
ひろ さん 00/02/10 20:21
 
 タラすけさん今日は、ひろです。色々な方から既にレスが付いていますが、
> リダイレクトの応用についてですが、
> マクロ中でも「その他-プログラムの実行」
 秀丸を最新版にしてみては如何でしょうか? 私の環境でも「プログラム実
行」で「sort<con>con」が上手く働きませんでしたが、Ver.3.02 以降にした
ら上手くいくようになりました。

[ ]
RE:01004 リダイレクトの応用についてNo.01021
タラすけ さん 00/02/15 17:27
 
みなさん助言を下さったり、
いちいち調べて下さったり
いろいろありがとうございました。
ひろさんが指摘されていますように、
新しいヴァージョンの秀丸で試したところ、
リダイレクトがうまく行くようになりました。
また、エラー出力の方もリダイレクトするように
かわったのでしょうか・・・?
perlの文法チェックが秀丸で
できるようになりました。以下のマクロです。
どうもありがとうございました。

perlの文法チェックのマクロ
--------------------------
run "perl -c " + filename + " >error.msg";
openfile "error.msg";
--------------------------

[ ]
RE:01021 リダイレクトの応用についてNo.01022
にひら さん 00/02/16 22:15
 
タラすけさん、こんばんは。初めまして。にひらと申します。
先日は私が半年以上前に書きました「マクロってすごいですね」に
レスをつけて戴きましてありがとうございました(^^)。あれから
マクロを書きつづけております〜(^^;)。

タラすけさんが書かれたPerlの文法チェックマクロを少々
いじってみました。よかったらお使い戴けたらと思います(^^)。

-----------------------------------------------------------
// perlの文法チェックのマクロ
// タラすけさん(秀丸エディタマクロ作者会議室発言)
// run "perl -c " + filename + " >error.msg";
// openfile "error.msg";

//以下にひら変更。
//  【優先度】
//    1.環境変数TEMPを指定してある場合はそこに。
//    2.環境変数TMPを指定してある場合はそこに。
//    3.秀丸のバックアップフォルダを指定してある場合はそこに。
//    4.以上3つに当てはまらない場合はソースと同じフォルダに。
//  ※1〜3の利点:デバッグ用に出力したファイルが一箇所に一ファイル残るだけ。

$tmp = getenv("TEMP") + "\\";
if(!result) $tmp = getenv("TMP") + "\\";
if(!result) {
call SubIntensiveChk;
if (#intensive) {
call SubBackupPath;
$tmp = $$return + "\\";
} else { $tmp = ""; }
run "perl -wc " + filename + " >" + $tmp + "errmsg.tmp";
openfile $tmp + "errmsg.tmp";
endmacro;


SubIntensiveChk:
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#intensive = getregnum( "IntensiveBackup" );
closereg;
return;

SubBackupPath:
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
$$backpath = getregstr( "BackupPath" );
closereg;
//ルートかどうかチェック
##n = strstr(rightstr($$backpath,1),"\\");
if (##n == -1) {
$$backpath = $$backpath + "\\";
}
return $$backpath;
-----------------------------------------------------------

タラすけさんが書かれていた2行だけですと、チェックするたびその
フォルダにチェックした残骸が残ってしまうと思いましたので以上の
ようなマクロを書いてみました。こうしますと1〜3にあてはまった
場合は一箇所に一ファイル残るだけになる…筈(^^;)。
perlのオプションにwも一応つけてみました。
いかがでしょ。お役にたてば幸いです(^^)。

[ ]
RE:01022 リダイレクトの応用についてNo.01023
にひら さん 00/02/16 22:23
 
あっ、やってもうた…自己レスです(^^;)。
先ほどのマクロ中
$tmp = $$return + "\\";
の行は
$tmp = $$return;
で済むんでした。失礼しました〜。

[ ]