我们可以在perl脚本中创建bash实例吗?

时间:2016-04-14 19:06:28

标签: perl

我正在尝试使用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!..";

1 个答案:

答案 0 :(得分:3)

Bash的-l论证说服它保持互动性。运行:

perl -e 'print `bash -l`'

它自己的bash进程以交互方式绑定到stdin,但子进程的输出由perl捕获并在bash退出后打印,只有在按 Control D时才会执行,发出exitlogout等。

您可能希望从$var = 'bash -l';开始。这将首先以交互方式启动bash,当您退出时,将继续执行该程序的其余部分。对我来说,想要这样做是不寻常的,我希望你应该为正常退出的bash写一些东西,可能是-c参数。

用以下代码替换前两行代码:

 system("bash", "-c", "echo Hello World!");

完成此操作并且程序的其余部分正常执行。我不确定你想要bash为你做什么。这些示例案例只需要完成就可以完成 system("echo", "Hello World!")print "Hello World!"