如何使用 sudo 权限打开一个新文件以在 perl 中写入

Bis*_*ana 1 perl file-io sudo

我正在尝试在 Linux 环境中打开一个新文件并写入一些内容。一般来说,操作目录需要 sudo 权限才能创建/写入新文件。在 perl 中我怎样才能以编程方式实现这一点?我希望使用 sudo 打开文件句柄,以避免权限被拒绝错误。

我很少看到关于此的旧帖子,但没有一个解决方案对我有用。我知道一种解决方案是使用 sudo 权限运行 perl 脚本,但我想执行在脚本内写入的操作,请建议

我的代码是这样的 -

open(my $fh, ">", $filename) or die "Could not open file '$filename' $!"; # Dies with the error
Run Code Online (Sandbox Code Playgroud)

我也尝试过

open(my $fh, '-|', 'sudo', '>', $filename) or die "Could not open file '$filename' $!"; # Asking for password
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 6

您的尝试告诉sudo执行一个名为 的程序>

您需要一个程序来创建文件、从其标准输入读取数据并将其读取到文件中的内容打印出来。

确保文件名安全后,您可以使用以下命令:

my $qfn = ...;   # The validated path.

open( my $pipe, "|-",
   "sudo",
      "/usr/bin/sh",
         "-c",
         'exec /usr/bin/cat >"$1"',
         "dummy",
         $qfn
)
   or die( "Can't execute sudo: $!\n" );

...

close( $pipe );
die( "Error cleaning up child: $!\n"              ) if $? == -1;
die( "Child killed by signal ".( $? & 0x7F )."\n" ) if $? & 0x7F;
die( "Child exited with error ".( $? >> 8 )."\n"  ) if $? >> 8;
Run Code Online (Sandbox Code Playgroud)