Perl 自带的 chmod 命令在 ubuntu 22.04 中无效

问题描述 投票:0回答:2

有了这个 Perl 和这台机器:

$ perl -v
perl 5, version 34, subversion 0 (v5.34.0) built for x86_64-linux-gnu-thread-multi

$ sb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:    22.04
Codename:   jammy

我运行了这段代码:

    my $filename=   't/mod_Prototype/SecondModule.t';
    my $nofile  =   chmod 0777, $filenmame;
    printf "%5sNumber of file :: %s - %s\n",'',$nofile,$filename;

我检查了它是否更改了权限:

ll t/mod_Prototype/
total 8
-rw-rw-r-- 1 lutz lutz 674 Mar 19 09:00 SecondModule.pm.t
-rw-rw-r-- 1 lutz lutz 674 Mar 19 10:05 SecondModule.t

这是我的问题:

  • 有谁知道Ubuntu是否支持这个命令?
  • 这个 perl 命令可能适用于哪个操作系统版本?
  • 或者这个函数仍然是 Perl 语言支持的部分吗?

我认为 Perl 中的系统调用可以解决这个问题, 但我正在寻找一个纯粹的 Perl 或语言解决方案。

我尝试创建一个脚本文件。

我希望使文件可执行(也称为更改文件的模式)。

我喜欢自动化脚本开发并测试 Perl 语言集,这些语言使用频率较低。 Perl 中有 215 个已知函数/关键字,但其中 49% 的关键字非常特殊,需要进行实验以确保它们仍然正常运行。

没有错误,没有产生警告,并且收到了正确的返回值(列表中的一个文件为 1),但该命令无法有效更改文件的模式。

perl chmod
2个回答
3
投票

您使用strict吗?这些变量不是同一个变量:

$filename
$filenmame

0
投票

是的,

chmod
可以在Ubuntu上运行。但您还没有检查命令是否成功。通常,这是通过检查它是否返回错误值来完成的。在
chmod
的情况下,它返回已更改的文件数,但由于您只更改一个,如果失败,它将返回 0。

my $nofile  =   chmod 0777, $filenmame or die "chmod 0777, $filename failed: $!"

您也可以使用 autodie 自动执行此操作。

最后,打开strictwarnings来捕获变量名称中的拼写错误等错误。

use strict;
use warnings;
use autodie;

my $nofile = chmod 0777, $filenmame;

哎呀,有一个错字。

$filenmame
vs
$filename

© www.soinside.com 2019 - 2024. All rights reserved.