0

問題のある 2 つの例: 次のステートメント構文の問題点 (perl 初心者):

$mailCmd = sprintf("echo $message | /usr/ucb/mail -s 'X Detected an Invalid Thing' %s", $people_list);

system($mailCmd)またはを実行すると、次`$mailCmd`のようになります。

sh: syntax error at line 2: `|' unexpected

別のもの:

$message = "Invalid STUFF setup for ID $r.  Please correct this ASAP.\n" .
            "Number of thingies  = $uno \n"   .
            "Another thingy      = $id  \n" ;

これにより、次が生成されます。

sh: Number: not found
sh: Another: not found

前もって感謝します

4

1 に答える 1

3

$message最初の問題の直接的な原因は、の内容が改行で終わっているため、次のコマンドを実行していることです。

echo ...
| /usr/usb/mail ...

どちらの問題も、シェル コマンドの不適切な構成が原因です。修理済み:

use String::ShellQuote qw( shell_quote );
my $echo_cmd = shell_quote('echo', $message);
my $mail_cmd = shell_quote('/usr/ucb/mail',
   '-s' => 'X Detected an Invalid Thing',
   $people_list,
);
system("$echo_cmd | $mail_cmd");

echoまたは、シェルを完全に回避します。

use IPC::Run3 qw( run3 );
my @cmd = ('/usr/ucb/mail',
   '-s' => 'X Detected an Invalid Thing',
   $people_list,
);
run3 \@cmd, \$message;
于 2013-06-07T05:06:38.970 に答える