- ベストアンサー
Shellモジュールについて教えてください。
CPANもみたのですが、 Shellモジュールで使えるコマンドはどういうものがあるのでしょうか?/bin/shで使えるコマンドすべてということでしょうか?
- みんなの回答 (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に対する入力はどうやって渡すつもりなんですか?
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
さすがに /usr/lib/sendmail は無理だと思う.... コンパイラの立場で見ると /usr/ の時点でパターンマッチングだと思っちゃうんじゃないかなぁ.
- sakusaker7
- ベストアンサー率62% (800/1280)
要は 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. と書いてありますので「使うのはオススメできない」んじゃないですかね。
お礼
ありがとうございます。 シェルから起動できるコマンドならなんでもですか。 ということは/usr/lib/sendmailコマンドとかも可能でしょうか? 製品を作るわけではないので大丈夫だと思います。
お礼
ありがとうございます。 フルパスでなければOKなのですね。 Perlのことがまだよくわかっていないので また考えます。