如何在没有 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 中运行命令?的主要内容,如果未能解决你的问题,请参考以下文章