如何在没有 sudo 的 Perl 中运行命令?

Posted

技术标签:

【中文标题】如何在没有 sudo 的 Perl 中运行命令?【英文标题】:How to run command in Perl without sudo? 【发布时间】:2016-12-20 12:49:20 【问题描述】:

我的用例有问题:

我使用sudo(来自 Jenkins)运行 Perl 脚本:

sudo /usr/bin/perl /Users/snaggs/scripts/build_ios.pl $BUILD_NUMBER $版本 $isPublish

脚本从 CLI 运行多个命令。

其中之一是:$ pod spec lint 失败并出现错误:Cannot run pod as root

my $command = "/usr/local/bin/pod spec lint $POD_SPEC_FILE_ABS --verbose";      
my $podResults = `$command`; 

我不想删除sudo

如何在没有超级用户的情况下在脚本中运行特定命令?

【问题讨论】:

【参考方案1】:

你应该使用 sudo my $command = "sudo -u $username /usr/local/bin/pod spec lint $POD_SPEC_FILE_ABS --verbose";

【讨论】:

【参考方案2】:

来自man sudo

sudo -v [-AknS] [-g 组] [-h 主机] [-p 提示] [-u 用户]

使用-u 标志指定不是超级用户但具有执行您想做的事情所需的权限的用户。


我不希望 Jenkins 作为普通用户(也不作为超级用户)运行测试代码。

更好的方法是设置 Jenkins 需要访问以使用 授予权限的文件和目录的所有权和权限,让 Jenkins 作为该组的成员运行,然后删除sudo

【讨论】:

以上是关于如何在没有 sudo 的 Perl 中运行命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何在cmd中运行perl

如何在 Emacs 中运行 sudo 命令?

如何从需要SUDO的php调用shell脚本?

如何在python中使用sudo chown命令?

如何将命令发送到在 perl 的非标准端口上运行的 telnet

Perl命令行常见用法及技巧