2016-09-16 3 views
1

Es lässt mich nicht antworten auf Kommentar so Bearbeitung hier, mit Linux als OS. Ich verwende die unten genannten, um Tickets zu erstellen, aber -k Parameter, Duplikation Parameter ruft die Nachricht in "" und wenn es "" in der Nachricht gibt, dann werden diese Parameter durcheinander gebracht und Nachrichten nicht weitergeleitet werden. Wie diese doppelten Anführungszeichen in -k Parameter zu entkommen, so dass es durchläuft? Vielen Dank im VorausFlucht doppelte Anführungszeichen in Perl in Linux

#!/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

Welches Betriebssystem betreiben Sie? – choroba

+2

Sie bekommen eine Menge Stimmen, um wegen Unklarheit zu schließen, was Sie fragen. Das liegt wahrscheinlich daran, dass es so viel Code gibt, dass es schwierig ist, den Teil zu finden, über den Sie gerade sprechen. Versuchen Sie, den Code, den Sie veröffentlichen, auf das zu beschränken, was zur Demonstration Ihres Problems notwendig ist. – ysth

Antwort

2

Für mich ist der einfachste Weg, eine Variable für Shell-Interpolation zu zitieren ist:

  1. legen Sie es in ''
  2. ersetzen jede ' mit '"'"'

So ersetzen

$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\"` ; 

mit

(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\"` ; 

(und tun das gleiche für alle anderen Parameter).

Verwenden Sie alternativ IPC :: System :: Simple :: capturex und übergeben Sie alle Argumente in einem Array.

Verwandte Themen