0

目前我正在使用 shell 脚本来删除 mailq 消息。我需要 sum 帮助将该 shell 脚本转换为 C 代码。任何示例或帮助表示赞赏。我只是想要一些基本的方向来做到这一点。

这是我正在使用的当前代码:

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

您可以使用“系统”功能来运行 shell 命令,包括管道。它将使用默认的系统 shell,它在您的系统上可能是也可能不是 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 回答