如何使用shell脚本输出作为perl脚本的输入(删除具有权限的文件)?

时间:2012-04-16 14:39:03

标签: perl shell

我在mailq上运行一个shell脚本来创建要删除的文件列表,但由于权限我无法使用shell脚本删除它们(当我使用root权限时脚本可以工作,但我不能总是为root提供root密码对用户的权限)。我想将文件的输出列表发送到perl以便删除它们,并且Perl程序具有root权限。

shell脚本是:

    #!/usr/bin/ksh
    WORKFILE="/tmp/check.mq"
    MAILLIST="yagyavalkbhatt@yahoo.com"

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

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

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

    cat mail.mq | while read file; do rm /var/spool/mqueue/$file;done
    find . -type f -name "mail.mq" |rm -rf mail.mq

创建输出,如:

    *##### where ##### is a unique 5 numbers to identify files in the mailq.

我想知道如何使用root priveleges从任何用户删除这些文件。

2 个答案:

答案 0 :(得分:1)

处理此问题的一个好方法是允许用户创建这样的列表并将输出保存到给定目录中的文件。然后,您可以定期(经常或不经常)通过用户提交的列表进行cron作业,检查内容以确保其合法(您只想允许列出某些目录中的某些文件以进行删除),删除文件,然后删除列表。

向用户提供root权限不是一个好主意。通常有更好的方法来完成工作。

答案 1 :(得分:-1)

将STDERR重定向到STDOUT并一起阅读。

示例:

@ls_output = `ls -l 2>&1`;