2016-09-16 5 views
1

LinuxをOSとして使用しているので、ここで編集してコメントを返信することはできません。 私は以下のチケットを作成するのに使用していますが、-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

どのOSを実行しますか? – 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を使用し、すべての引数を配列に渡します。

関連する問題