- - PR -
system関数の戻り値
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-03-16 20:30
お世話になります。松本と申します。
現在、Linuxで動作しているPerlとシェルをWindowsに移植しています。 WindowsにCygwinをインストールし、シェルは移植できたのですが Perlからシェルを起動し戻り値を取得することができずに悩んでいます。 WindowsでPerlからシェルを起動し、戻り値を取得する方法を ご存知の方がおられましたら、ご教授お願い致します。 WindowsのPerlとシェル ======================= /usr/local/ap/abc.sh ※戻り値で1を返す ======================= #!/bin/bash exit 1 ======================= abc.cgi ※シェルを起動し戻り値を取得する ======================= #!C:/Perl/bin/perl local($result) = (system "bash /usr/local/ap/abc.sh"); $resultに「0」が入ってしまう。「1」がほしい。 | ||||||||
|
投稿日時: 2005-03-16 23:43
system("/usr/local/ap/abc.sh");
孫シェルにせず、こうすれば、どうですかな? | ||||||||
|
投稿日時: 2005-03-17 00:03
ご返事ありがとうございます。
一部訂正。 シェルのパスが/usr/local/ap/abc.shではなく c:/program files/ap/abc.shでした。(>_<) system("c:/program files/ap/abc.sh"); で試してみましたが、起動できませんでした。(^^ゞ cygwinでは "c:/program files/ap/abc.sh" で起動するのですが コマンドプロンプトからは起動できず bash "c:/program files/ap/abc.sh" で起動できます。 頭にbashを付けてしまうと、シェルの戻り値が拾えないようです... 孫シェルの戻り値を拾う方法があればいいのですが... | ||||||||
|
投稿日時: 2005-03-17 00:30
どれが原因か判りませんが、途中まで調べたので、投稿します。
【注意】スクリプトに「$1」とか「¥n」を含んでいるので、それぞれ全角に置き換えています。 まず、シェルスクリプトの動作の確認。 引数をまんまexitで返すシェルスクリプトを用意します。
これをbash上で動かしてみると…ちゃんと終了コードが返ります。 $ ./echoresult.sh 0; echo $? 0 $ ./echoresult.sh 1; echo $? 1 次に、Win32版Perlを使っておられることから、 たぶんsystemはcmd.exe (Windows 2000 Serverだから)を経由すると思うので、 cmd経由の動作を確かめます。 C:¥> cmd /C "bash echoresult.sh 0" && echo success success C:¥> cmd /C "bash echoresult.sh 1" && echo success cmd経由でもちゃんと終了コードが渡るようです。 # もしcmdではなく、command.com経由だったら終了コードは # まともに返ってこなかった(常に0)と思うのですが、 # 確かめていません。 ついでに、Cygwinのperlで同様のことをやってみました。
Cygwinのperlでは、ちゃんと値が返ってきます。 $ ./echoresult.pl result=0 exitcode=0 signal=0 result=256 exitcode=1 signal=0 result=512 exitcode=2 signal=0 |
1