我试图单独获取一个作为参数传递的文件的inode。
但是,当我提取inode时,新行上会打印出0。我试图用正则表达式来摆脱它,但我不能。我正在传递脚本/usr/bin/vim
当我运行命令(ls -i /usr/bin/vim | awk '{print $1}'
)时,0不在那里,但是当我运行脚本时。
我怎样才能摆脱这个0?
my $filepath = $ARGV[0];
chomp $filepath;
$filepath =~ s/\s//g;
print ("FILEPATH: $filepath\n"); #looks good
my $inode = system("ls -i $filepath | awk '{print \$1}'");
$inode =~ s/[^a-zA-Z0-9]//g;
$inode =~ s/\s//g;
print ("$inode\n");
所以我的结果是
137699967
0
答案 0 :(得分:3)
当您调用Queue
时,您运行作为其参数提供的命令,以及输出inode编号的内容。
system
的返回值是命令运行的退出代码,在这种情况下为0,这是您后续system
调用的内容输出。
要运行外部程序并捕获其输出,请使用print
运算符,如下所示:
qx
但是,正如Sobrique在回答中解释的那样,您实际上并不需要拨打外部程序,而是可以使用Perl的内置my $inode = qx/ls -i $filepath | awk '{print \$1}'"/;
功能。
stat
my $inode = stat($filepath)[1];
返回一个包含有关文件的各种信息的列表 - 索引1保存其inode。当然,如果文件不存在,此代码将无法处理。
答案 1 :(得分:2)
不要只使用内置的stat
print (stat($filepath))[1]."\n";
print join "\n", map { (stat)[1] } @ARGV,"\n"