0

現在、シェル スクリプトを使用して mailq メッセージを削除しています。そのシェル スクリプトを C コードに変換するための sum ヘルプが必要です。例や助けをいただければ幸いです。それを行うための基本的な方向性が欲しいだけです。

これは私が使用している現在のコードです:

#!/usr/bin/ksh
 WORKFILE="/tmp/check.mq"
 MAILLIST="emailadress"

mailq|grep -B1 -i temporarily |grep -iv deferred |egrep -i  'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print   substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq
mailq|grep -B1 -i unknown|egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq
mailq|grep -B1 -i lookup |grep -iv deferred |egrep -i 'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq

 cat mail.mq | while read file; do rm -rf /var/spool/mqueue/$file;done
 rm -rf mail.mq

基本的に、メッセージ ID の最後の 5 つの数字の部分文字列を使用して、それを自分の mailid に送信し、それらの ID を削除しています。

4

1 に答える 1

0

「システム」機能を使用して、パイプラインを含むシェル コマンドを実行できます。デフォルトのシステム シェルが使用されます。これは、システム上で ksh である場合とそうでない場合がありますが、問題にならない可能性があります。それが重要な場合は、コマンド文字列の先頭でいつでも明示的に「ksh -c」と言うことができます。

system("mailq|grep -B1 -i temporarily |grep -iv deferred |egrep -i  'jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print   substr($0,10,14)}' |tee -a $WORKFILE |awk '{print "*" $1}' |tee -a mail.mq")

そこに $WORKFILE を織り込む方法を理解する必要があります。これは、最初にコマンド文字列を構築するために snprintf() を使用して簡単に行うことができます。getenv() を使用して値を検索できます。

于 2012-04-27T08:13:17.597 に答える