我正在尝试在 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)
您的尝试告诉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)