Devel::Cover:在切换用户后无法打开test.pl进行MD5摘要:没有这样的文件或目录。

3

我正在使用Devel::Cover在Linux上收集我的Perl覆盖率,但当我尝试切换用户时遇到了问题。以下是重现步骤:

  1. 有2个用户:user1和user2,并设置$PERL5OPT=-MDevel::Cover=-db, [覆盖文件夹的路径]
  2. 登录为user1并将test.pl放置在/home/user1/
  3. 运行perl /home/user1/test.pl
  4. 通过运行"sudo su - user2"切换到user2

切换用户后会看到错误消息"Devel::Cover: Can't open test.pl for MD5 digest: No such file or directory"

我尝试通过在PERL5OPT中设置参数来使其正常工作,例如:

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

但是它没有起作用,有人可以帮忙吗?

也许你在某个地方使用了~/test.pl,而在su之后$HOME没有设置?在两种情况下打印环境变量,也许你会发现一些东西。 - user1126070
谢谢评论,但环境看起来不错。 - zhutoulala
通常我不建议人们问这种问题,但是我真的被难住了。您为什么想要更改用户?您是在Devel::Cover仍在运行时更改用户还是在其完成后更改?如果是前者,为什么会对Devel::Cover的抱怨感到惊讶? - Medlock Perlman
3个回答

4

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

export PERL5OPT=-MDevel::Cover=-db,[path to coverage folder],-dir,[Paths of perl scripts to cover]

如果您想为Devel::Cover设置选项,只需使用DEVEL_COVER_OPTIONS环境变量。例如:export DEVEL_COVER_OPTIONS=-db,[覆盖文件夹的路径],-dir,[要覆盖的Perl脚本的路径] - Medlock Perlman

1
根据文档显示,当我们传递-dir参数时,只需定义收集覆盖数据的目录。

0
你是否验证了user2能否访问/home/user1/test.pl?这听起来像是一个权限问题。

用户2有访问/home/user1/test.pl的权限。但是很有趣,我刚刚尝试使用用户2运行perl /home/user1/test.pl,结果出现了3次错误信息!很有趣... - zhutoulala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接