2016-09-16 112 views
1

它不让我在这里使用Linux作为操作系统回复评论。 我正在使用下述内容获取创建的票据,但-k参数,重复参数在“”中获取消息,如果消息中有“”,则这些参数会混乱并且消息不会被转发。 如何在-k参数中使用这些双引号以便通过? 在此先感谢在Linux中perl中转义双引号

#!/usr/bin/perl 

use strict; 

use Getopt::Std; 



# declare the perl command line flags/options we want to allow 


# Define the environment 

    my %option=(); 

    my $SEND_OUTPUT = "" ; 

    my $MODE = "Prod" ; 

    my $SENDEVENT_LOG = ""; 

    my $DATE = "" ; 

    my $SEND_EVENT = ""; 

    my $SEND_OUTPUT_LOG = "" ; 

    my $DSOM_SEV = "" ; 

getopts("q:a:n:p:s:k:c:m:t:y:z:", \%option); 


# Define the environment 



     if ($MODE =~ m/Prod/i) { 

      $SENDEVENT_LOG="/var/opt/SendEvent/log/SendEvent.log"; 

} 



if ($MODE =~ m/Dev/i) { 



    $SENDEVENT_LOG="/var/opt/SendEvent/log/SendEvent.Dev.log"; 



} 

# Define time stamp 



     my $DATE=`date +%Y:%m:%d:\%T`; chomp $DATE ; my $TIME=`date +%T`; chomp $TIME; my $NOW=$DATE." "; 





# Open Logfile and define the Date Variable 




     open (LOGFILE, ">>${SENDEVENT_LOG}") or die ("Cannot open SendEvent log file "); 




# test for the existence of the options on the command line. 

# in a normal program you'd do more than just print these. 




print LOGFILE "$DATE *******************************************************************\n"; 

print LOGFILE "\n$DATE New Instance of SendEvent initiated\n" ; 

print LOGFILE "$DATE Examine the input arguments below to validate this instance of SendEvent\n\n" ; 



     print "\n\n" ; 



     if ($option{q}) { print LOGFILE "$DATE -q $option{q}\n" } else { print LOGFILE "$DATE -q **** value missing *****\n" } 

     if ($option{a}) { print LOGFILE "$DATE -a $option{a}\n" } else { print LOGFILE "$DATE -a **** value missing *****\n" } 

     if ($option{n}) { print LOGFILE "$DATE -n $option{n}\n" } else { print LOGFILE "$DATE -n **** value missing *****\n" } 

     if ($option{p}) { print LOGFILE "$DATE -p $option{p}\n" } else { print LOGFILE "$DATE -p **** value missing *****\n" } 

     if ($option{s}) { print LOGFILE "$DATE -s $option{s}\n" } else { print LOGFILE "$DATE -s **** value missing *****\n" } 

     if ($option{k}) { print LOGFILE "$DATE -k $option{k}\n" } else { print LOGFILE "$DATE -k **** value missing *****\n" } 

     if ($option{c}) { print LOGFILE "$DATE -c $option{c}\n" } else { print LOGFILE "$DATE -c **** value missing *****\n" } 

     if ($option{m}) { print LOGFILE "$DATE -m $option{m}\n" } else { print LOGFILE "$DATE -m **** value missing *****\n" } 

     if ($option{t}) { print LOGFILE "$DATE -t $option{t}\n" } else { print LOGFILE "$DATE -t **** value missing *****\n" } 

     if ($option{y}) { print LOGFILE "$DATE -y $option{y}\n" } else { print LOGFILE "$DATE -y **** value missing *****\n" } 

     if ($option{z}) { print LOGFILE "$DATE -z $option{z}\n" } else { print LOGFILE "$DATE -z **** value missing *****\n" } 



     # other things found on the command line 

     print LOGFILE "$DATE Other things found on the command line:\n" if $ARGV[0]; 

     foreach (@ARGV) 

     { 

     print LOGFILE "$DATE $_\n"; 

     } 


    my $TOOL   = "$option{q}" ; 

    my $MSG_APPL  = "$option{a}" ; 

    my $MSG_NODE_NAME = "$option{n}" ; 

    my $ESM_PROFILE = "$option{p}" ; 

    my $MSG_SEV  = "$option{s}" ; 

    my $DEDUPLICATION = "$option{k}" ; 

    my $MANAGEMENT_ID = "$option{c}" ; 

    my $LONG_TEXT  = "$option{m}" ; 

    my $SHORT_TEXT = "$option{t}" ; 

    my $DEFAULT_Q  = "$option{y}" ; 

    my $ACCOUNT  = "$option{z}" ; 



# Translate OpenView Severity to DSOM Severity 



#     OpenView Sev    DSOM Sev 



    if ($MSG_SEV =~ m/Critical/i) { $DSOM_SEV = "FATAL" } 

    if ($MSG_SEV =~ m/Major/i ) { $DSOM_SEV = "CRITICAL" } 

    if ($MSG_SEV =~ m/Minor/i ) { $DSOM_SEV = "MINOR" } 

    if ($MSG_SEV =~ m/Warning/i ) { $DSOM_SEV = "WARNING" } 

    if ($MSG_SEV =~ m/Normal/i ) { $DSOM_SEV = "HARMLESS" } 



    print LOGFILE "\n$DATE Translating Openview Severity to DSOM Severity, $MSG_SEV => $DSOM_SEV\n\n" ; 


    $SEND_OUTPUT_LOG = "/opt/SendEvent/dist/SendEvent/SendEvent send -q \"$TOOL\" -a \"$MSG_APPL\" -n \"$MSG_NODE_NAME\" -p \"$ESM_PROFILE\" -s \"$DSOM_SEV\" -k \"$DEDUPLICATION\" -c \"$MANAGEMENT_ID\" -m \"$LONG_TEXT\" -t \"ABC $SHORT_TEXT\" -z \"ABC\" -y \"$DEFAULT_Q\"" ; 



    $SEND_EVENT=`/opt/SendEvent/dist/SendEvent/SendEvent send -q "$TOOL" -a "$MSG_APPL" -n "$MSG_NODE_NAME" -p "$ESM_PROFILE" -s "$DSOM_SEV" -k "$DEDUPLICATION" -c "$MANAGEMENT_ID" -m "$LONG_TEXT" -t "ABC $SHORT_TEXT" -z "ABC" -y \"$DEFAULT_Q\"` ; 


    print LOGFILE "$DATE \n$SEND_EVENT\n\n" ; 



    print LOGFILE "$DATE $SEND_OUTPUT_LOG\n\n" ; 
+0

你运行什么操作系统? – choroba

+2

你会得到很多选票来关闭你的问题。这可能是因为那里有太多的代码,很难找到你正在谈论的部分。尽量缩小你发布的代码,以证明你的问题是必要的。 – ysth

回答

2

对我来说,引用壳插一个变量的最简单方法是:

  1. 括在''
  2. 更换任何''"'"'

所以替换

$SEND_EVENT=`/opt/SendEvent/dist/SendEvent/SendEvent send -q "$TOOL" -a "$MSG_APPL" -n "$MSG_NODE_NAME" -p "$ESM_PROFILE" -s "$DSOM_SEV" -k "$DEDUPLICATION" -c "$MANAGEMENT_ID" -m "$LONG_TEXT" -t "ABC $SHORT_TEXT" -z "ABC" -y \"$DEFAULT_Q\"` ; 

(my $quoted_DEDUPLICATION = $DEDUPLICATION) =~ s/'/'"'"'/g; 
$SEND_EVENT=`/opt/SendEvent/dist/SendEvent/SendEvent send -q "$TOOL" -a "$MSG_APPL" -n "$MSG_NODE_NAME" -p "$ESM_PROFILE" -s "$DSOM_SEV" -k '$quoted_DEDUPLICATION' -c "$MANAGEMENT_ID" -m "$LONG_TEXT" -t "ABC $SHORT_TEXT" -z "ABC" -y \"$DEFAULT_Q\"` ; 

(做你的所有其他参数相同)。

或者,使用IPC :: System :: Simple :: capturex并传递数组中的所有参数。