我想从perl开始一个新的shell(我在exec
语句中做)。当子shell启动时,我想在新shell上打印一些消息,并希望在子shell上运行另一个perl脚本。
我这样做:
exec $ENV{SHELL};
请帮忙。
答案 0 :(得分:0)
取决于你想做什么。
我认为你所追求的是回归``
查看http://perldoc.perl.org/perlop.html#%60STRING%60,其中有一些关于如何捕获外部命令输出的好例子。请注意,反引号会进行分叉。
我喜欢使用Perls引用,例如运算符qx
来代替反引号。
http://perldoc.perl.org/perlop.html#Quote-Like-Operators
示例:强>
my $ls = qx/ls/;
my $ret_ls = $? >> 8;
print "Output: $ls\nExit Code: $ret_ls";
示例其他脚本:
my $other_script_output = qx{/path/to/other_script.pl};
my $ret_other_script = $? >> 8;
print "Output: $other_script_output\nExit Code: $ret_other_script";
如果您正在寻找以编程方式与该流程进行交互,那么您将进入open2 / open3。
答案 1 :(得分:0)
我认为你在寻找的是
use strict;
use warnings;
open my $fh, '|-', $ENV{SHELL};
print $fh <<'EOF';
echo "$0: From shell goes hell"
EOF
注意'
周围'EOF'
禁用shell脚本的Perl插值,但$0
由shell插入。您将不得不以\$0
转义以获取shell可执行文件。有关详细信息,请参阅perlop Here-document。
您也可以将现有的文件句柄用于此目的
use strict;
use warnings;
close STDIN;
open STDIN, '<&', \*DATA;
exec $ENV{SHELL};
__DATA__
echo "$0: From shell goes hell"
注意open my $fh, '|-', $ENV{SHELL};
只是open my $fh, '|-' or exec $ENV{SHELL};
的语法糖,其中open my $fh, '|-'
是某些pipe
,close
,dup
,{{的语法糖1}}玩杂耍。
但是这段代码不起作用
fork