我有一个由Jenkins CI执行的perl脚本,但是当它尝试执行以下代码时,我收到“不适当的ioctl for device”错误。
$) = $new_group;
if($!){
print STDERR $! . "\n";
print STDERR "Failure to change permissions to: Gid: $new_group \n";
next;
}
$> = $new_user;
if($!){
print STDERR $! . "\n";
print STDERR "Failure to change permissions to: Uid: $new_user \n";
next;
}
但是如果像这样手动做同样的事情,我没有收到任何错误
perl -e '$) = 99; if($!){print $! ."\n";} $> = 99; if($!){print $!."\n";}print `whoami`;'
发生此错误的原因,以及我的意思?我在网上搜索,但是当文件处理程序打开时,似乎发生了这种情况,在更改用户时看到任何关于它的例子。
所有脚本都以root身份执行。
答案 0 :(得分:1)
$!只有在系统调用失败后才能直接使用。当设置组或用户成功时,您实际上并不知道$!中的内容,并且不能依赖它是假值。在设置用户和组时,您可能会尝试使用'或die',或者只是比较$)和$>尝试设置后再次使用$ new_group和$ new_user。
答案 1 :(得分:0)
要调试代码,请使用此方法,并查看最新情况。收到错误时打印出每个变量内容。请使用严格和警告,他们会帮助你很多!
如果使用此方法无法解决此问题,请输入输出。
use strict;
use warnings;
use Data::Dumper;
$) = $new_group;
warn "\$), \$new_group: ".Dumper($),$new_group);
...