Perl &引用;盖子:罐头盒';t为MD5摘要打开test.pl:没有这样的文件或目录";切换用户后

Perl &引用;盖子:罐头盒';t为MD5摘要打开test.pl:没有这样的文件或目录";切换用户后,perl,code-coverage,Perl,Code Coverage,我正在使用Devel::Cover收集linux上的perl覆盖率,但在尝试切换用户时遇到了一个问题。以下是复制的步骤: 有两个用户:user1和user2,并设置$PERL5OPT=-MDevel::Cover=-db,[覆盖文件夹路径] 以user1身份登录,并在/home/user1/ 运行perl/home/user1/test.pl 通过运行“sudo su-user2”切换到user2 错误消息“Devel::Cover:无法打开MD5摘要的test.pl:在用户更改后立即看不到这样

我正在使用Devel::Cover收集linux上的perl覆盖率,但在尝试切换用户时遇到了一个问题。以下是复制的步骤:

  • 有两个用户:user1和user2,并设置
    $PERL5OPT=-MDevel::Cover=-db,
    [覆盖文件夹路径]
  • 以user1身份登录,并在
    /home/user1/
  • 运行perl
    /home/user1/test.pl
  • 通过运行“sudo su-user2”切换到user2
  • 错误消息
    “Devel::Cover:无法打开MD5摘要的test.pl:在用户更改后立即看不到这样的文件或目录”

    我试图通过在PERL5OPT中设置参数来实现它,比如:

    export PERL5OPT=-MDevel::Cover=-db,[path to coverage folder],+inc,/var/home,/home
    

    但它不起作用,有人能帮忙吗?

    您是否验证了user2可以访问/home/user1/test.pl?这听起来像是权限问题。

    好吧,最后我自己想出了一个解决方案——只包括我想用“-dir”收集覆盖率信息的文件夹:


    从我在文档中看到的情况来看,当我们传递
    -dir
    参数时,我们只定义了收集覆盖率数据的目录

    也许您在某处使用了~/test.pl,而在su之后没有设置$HOME?在这两种情况下,也许你都发现了一些东西。谢谢你的评论,但是环境看起来很好。我通常不鼓励人们问这种问题,但我在这里真的被难住了。为什么要更改用户?您是在Devel::Cover仍在运行时还是在它完成后执行此操作?如果是前者,那么如果Devel::Cover抱怨,您为什么会感到惊讶呢?user2有权访问/home/user1/test.pl。但这一点很好,我刚刚尝试用user2运行perl/home/user1/test.pl,我收到了3次错误消息!有趣的是……如果要为Devel::Cover设置选项,只需使用Devel\u Cover\u options环境变量即可。i、 e.:
    export-DEVEL\u-COVER\u-OPTIONS=-db,[path to-coverage folder],-dir,[path of perl scripts to COVER]
    export PERL5OPT=-MDevel::Cover=-db,[path to coverage folder],-dir,[Paths of perl scripts to cover]