• ベストアンサー

Shellモジュールについて教えてください。

CPANもみたのですが、 Shellモジュールで使えるコマンドはどういうものがあるのでしょうか?/bin/shで使えるコマンドすべてということでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

>ということは/usr/lib/sendmailコマンドとかも可能でしょうか? > 製品を作るわけではないので大丈夫だと思います。 微妙にこちらの意図が伝わっていないような気がしますが、 それはまあおいといて。 shell.pmのキモは my $cmd = $AUTOLOAD; $cmd =~ s/^.*:://; my $null = File::Spec::Functions::devnull(); $Shell::capture_stderr ||= 0; eval <<"*END*"; sub $AUTOLOAD { shift if ref \$_[0] && \$_[0]->isa( 'Shell' ); if (\@_ < 1) { \$Shell::capture_stderr == 1 ? `$cmd 2>&1` : \$Shell::capture_stderr == -1 ? `$cmd 2>$null` : `$cmd`; } else { (略) my \$a; my \@arr = \@_; unless( \$Shell::raw ){ open(SUBPROC, join(' ', '$cmd', \@arr, '|')) or die "Can't exec $cmd: \$!\\n"; } *END* の部分にあるので、sendmailであってもフルパスによる 指定でなければ大丈夫のはずです。 sendmail("-f $user"); とでもなるんでしょうかね。 でもsendmailに対する入力はどうやって渡すつもりなんですか?

noname#24489
質問者

お礼

ありがとうございます。 フルパスでなければOKなのですね。 Perlのことがまだよくわかっていないので また考えます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

さすがに /usr/lib/sendmail は無理だと思う.... コンパイラの立場で見ると /usr/ の時点でパターンマッチングだと思っちゃうんじゃないかなぁ.

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

要は open の引数にすりかえて同じ名前の外部プログラムを実行する仕掛けなので、 シェルから起動できるプログラムであればなんでも。 検索PATHの値の関係はありますけどね。 あと、 This package is included as a show case, illustrating a few Perl features. It shouldn't be used for production programs. Although it does provide a simple interface for obtaining the standard output of arbitrary commands, there may be better ways of achieving what you need. と書いてありますので「使うのはオススメできない」んじゃないですかね。

noname#24489
質問者

お礼

ありがとうございます。 シェルから起動できるコマンドならなんでもですか。 ということは/usr/lib/sendmailコマンドとかも可能でしょうか? 製品を作るわけではないので大丈夫だと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • shellについて

    #/bin/shについて教えてください。 if文条件にてプロンプト(aiueo>)が返ってきたら、 lsコマンドを発行するシェルを作成したいと考えています。 プロンプトをコマンド発行の条件とすることは可能でしょうか? ご回答のほどよろしくお願いします。

  • Perlでモジュールをインストールしない方法

    Perlでモジュールをインストールしない方法をしりたいです。 普通はコマンドを使ったりして必要なモジュールを予めインストールしますが、インストールせずにCPANサイトからモジュールをダウンロードしてきて使用する方法はありますか? 自分の感覚だと、プログラムの最初に何かを宣言すればいいのかな、と思うのですが。

    • ベストアンサー
    • Perl
  • perl -MCPAN -e shellの意味は?

    皆さんCPANをインストールする際 perl -MCPAN -e shell とコマンドラインで入力されていると思いますが、 perl 以降の引数の中で 「shell」 について正確な意味を教えていただけませんでしょうか。 現在下記のものは理解しております。 ■「-MCPAN」について http://homepage3.nifty.com/hippo2000/perltips/CPAN.htm ※こちらの質問でも言及あり http://okwave.jp/qa/q2460025.html ■「-e」について http://www.rfs.jp/sb/perl/02/12.html -eオプション以降にshellと入力するとどんな意味があるのでしょうか。 ご教授お願いいたします。

    • ベストアンサー
    • Perl
  • スタンドアロン環境でのCPANモジュールのインストールについて

    Perl初心者ながら一人で開発にはいることになり四苦八苦していますが、 このサイトではいつもお世話になっております。 CPANのモジュールをつかってWEBアプリケーションを つくろうとしているのですが、開発環境がインターネットに接続して いないスタンドアロンな環境です。 このような場合、 ・CPANサイトからtarファイルを1つづつダウンロードしてmake/installするしかないのでしょうか? ・その場合、モジュールの依存関係はどのように把握するのでしょうか? いま、必要と思われるパッケージを入れるたびに、芋づるに式前提パッケージが判明しててまたCPANから落としてくるの繰り返しになっており、ちょっと困っています。 CPAN SHELLがつかえると、依存関係を解決してくれるというのは わかりましたが、スタンドアロン環境の場合は一般的にはどのように するものでしょうか? よろしくお願いいたします。

  • CPANの環境、インストール設定

    1.CPANのモジュールの下準備として必要な環境は、LinuxやCygwin環境を導入していること。 2.以下のサイトの右側にあるDownload: CPAN-1.87.tar.gzをクリックしてダウンロードする。 http://search.cpan.org/~andk/CPAN-1.87/lib/CPAN.pm 3.C:\tempを作り、ここにLhaplusなどのソフトで解凍する。 4.コンソールからcd C:tempに移動して以下のコマンドを打つ。 # perl Makefile.PL # make && make test # make install 5.ホームに戻りコンソールから以下のコマンドを実行する。 perl -MCPAN -e shell ほとんどエンターでOK? 6.二回目にperl -MCPAN -e shellを押してcpanを起動する。 cpan>install Bundle::CPAN などでモジュールをインストールする。 以上のことをやってみたのですが、スクリプトが動きませんでした。 各項目で間違っていることろなどを教えてください。 どこかのサイトではコンパイルが必要と書いてあったのですが、何をコンパイルすればいいのかさっぱりわかりません。ここもアドバイスお願いします。

    • ベストアンサー
    • Perl
  • Perlのモジュールが極端に少ない

    OS(CentOS 6.2 / 64bit)にデフォルトでインストールされているPerl(version 5.10.1)を使って勉強しているのですが、参考書に記載されているメジャーなモジュールがインストールされてなく、困っています。 自分でインストールする必要があるのかと思い、モジュールのインストール方法を調べたところ、CPANというモジュールを使えば簡単にモジュールがインストールできると知ったのですが、このCPANモジュールも入っていない模様。 ではまずはCPANモジュールから手動でインストールしようかと思ったところ、CPANモジュールインストール時のMakefile.PLを実行すると、ExtUtilsというモジュールが無いと怒られてしまい実行できませんでした。 このような場合、通常よく使われるようなモジュールをまとめてインストールするような方法は無いのでしょうか。 ※ちなみに、@INCでは以下のディレクトリが登録されていました。 ・/usr/local/lib64/perl5 ・/usr/local/share/perl5 ・/usr/lib64/perl5/vender_perl ・/usr/share/perl5/vender_perl ・/usr/lib64/perl5 ・/usr/share/perl5

    • ベストアンサー
    • Perl
  • モジュールのバージョン確認方法

    ローカルにあるテストサーバーに Perlのモジュールをインストールしたのですが、 インストールしたモジュールのバージョンの確認方法が判らず大変困っております。 有識者様お手数ですが、ご教授をお願いできないでしょうか? Perl -vのコマンドでPerlのバージョンは確認できるのですが、モジュールバージョンの確認方法が判らずにこまっております。 ちなみに、バージョンを知りたいモジュールはRSS.pmとなております。 参考: http://search.cpan.org/~abh/XML-RSS-1.10/

    • ベストアンサー
    • Perl
  • Perlモジュールインストール

    下記環境においてPerlモジュールインストール(perl -MCPAN -e shell) をしているのですが、ftp://ftp.perl.org/pub/CPAN/MIRRORED.BYにつながりません。>^< (FTP(C:\WINNT\system32\ftp.EXE)が問題みたいな応答が出てきます。) 助けてください。 ●環境 Windows2000+ActivePerl 5.6+Apache1.3.27 (~略~) Your ftp_proxy? Your http_proxy? Your no_proxy? You have no C:\USR\Perl\Cpan\sources\MIRRORED.BY I'm trying to fetch one CPAN: LWP::UserAgent loaded ok Fetching with LWP: ftp://ftp.perl.org/pub/CPAN/MIRRORED.BY

    • ベストアンサー
    • Perl
  • Android の adb shell について

    rootedの端末でandroidscreencastを導入したあとコマンドプロンプトからadb shellにて adb shell <press enter> su <press enter> After this step, check your phone to see that it is asking for super user permissions, or that there is a message that says that SU permissions are granted mount -o remount,rw -t yaffs2 /dev/block/mtdblock2 /system <press enter> chmod 4755 /system/bin/sh <press enter> exit <press enter> を実行すると、adb shellでsuを抜けられなくなりました。($に戻れなくなりました) 直す方法を教えてください(><)

  • CPANモジュール取得におけるmakeについて

    CPANモジュールのインストールについて質問があります。 環境は Windows XP, ActiveParl5.8.8 ,コンパイラはVC++6.0 です。 ※tar.exeとgzip.exeは C:\Perl\binにあります。 現在、Text::NSPというモジュールをインストールしようとしていますが cpan> install Text::NSP を実行すると makefile (1199):fatal error U1033:予期しない'@echo'Stop. nmake --NOT OK とエラーが出ました。 Microsoftサポートオンラインでエラーを調べたら、nmake仕様が原因らしいのですが、どこをどう変えたら解決できるのかが分かりません。 また、nmake ではなく dmake を使おうと思い、 C:\Perl\bin に dmake.exe を起きました。 また、C:\Perl\lib\CPAN のフォルダにあるConfig.pmのmakeを  'make'= q[] ⇒  'make' =q[C:\Perl\bin\dmake.EXE]と変更しました。 上記の変更で実行すると dmake.exe: Error-- 'C:\Perl\libConfig.pm' not found, and can't be made C:\Perl\bin\dmake.exe -- Not OK とエラーになります。 また perl -V:make でmakeを確認しても常に結果が make ='nmake'; としかなりません。 ここが make ='dmake'; と変えられればインストール出来るのかな?とも考えています。 この変更の仕方が調べているのですが、なかなか分かりません。 よろしくお願いします。 ※現在のnmakeの設定で他のモジュールは何の問題もなくインストール出来ています。

    • ベストアンサー
    • Perl