我正在尝试使用Perl创建一个运行bash的进程,然后创建一个文件sample.txt
,但是在bash命令之后我无法在控制台或任何sample.txt
文件中看到任何输出相同的目录结构。有人可以帮我修改下面的代码吗?
my $var = `bash -l`;
system($var);
print "Done!";
my $filename = 'sample.txt';
open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
chmod(0777, "sample.txt");
print $fh "hello";
close $fh;
print "Done 1!..";
答案 0 :(得分:3)
Bash的-l
论证说服它保持互动性。运行:
perl -e 'print `bash -l`'
它自己的bash进程以交互方式绑定到stdin,但子进程的输出由perl捕获并在bash退出后打印,只有在按 Control D时才会执行,发出exit
或logout
等。
您可能希望从$var = 'bash -l';
开始。这将首先以交互方式启动bash,当您退出时,将继续执行该程序的其余部分。对我来说,想要这样做是不寻常的,我希望你应该为正常退出的bash写一些东西,可能是-c
参数。
用以下代码替换前两行代码:
system("bash", "-c", "echo Hello World!");
完成此操作并且程序的其余部分正常执行。我不确定你想要bash为你做什么。这些示例案例只需要完成就可以完成
system("echo", "Hello World!")
或print "Hello World!"
。