目前我正在使用shell脚本删除mailq消息。我想总结帮助将该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。
答案 0 :(得分:0)
您可以使用“system”函数运行shell命令,包括管道。它将使用默认的系统shell,它可能是你的系统上的ksh,也可能不是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()来查找值。