我有一個腳本,它在Expect中使用system()來執行不同的命令。從sytem()調用過濾STDOUT並輸出選擇性文本
對於大多數這些我不需要將STDOUT打印到用戶,但在一種情況下,我只想輸出的一小部分打印給用戶。我已經使用下面的方法來重定向STDOUT等所有不同的命令。
我的問題很簡單,我怎樣才能改變這種做法,我可以收集輸出的一些變量,打印只是一部分的所有輸出(字符串例如「組號= 12345)的用戶?
sub execute_cmd {
my ($q) = @_;
my $para1 = $q->param('para1');
my $para2 = $q->param('para2');
my $para3 = $q->param('para3');
if($transtype eq "A") {
my $cmd = "\/\*ID\=66\*\/OOO LOIPAW\:XXX\=1\,ABC=K\'$para1\,DEF\=ALL\,GHI\=JKLMNO\,PQR\=$para2\;\r";
print $cmd;
print "<br><br>";
open (TEMPERR, ">&STDERR");
open (TEMPOUT, ">&STDOUT");
open (STDERR, ">nul");
open (STDOUT, ">nul");
system ("./xxx.exp", $cmd);
open (STDERR, ">&TEMPERR");
open (STDOUT, ">&TEMPOUT");
close (TEMPERR);
close (TEMPOUT);
}
你說的是系統命令的輸出嗎? – TLP
是的。在系統輸出(「./xxx.exp」,$ cmd); –
你也應該知道這段代碼看起來非常不安全。您在系統調用中直接使用CGI參數,而沒有任何形式的驗證。如果有人進入' rm -rf /'在你的「para2」參數中? – TLP