从perl脚本启动新shell,并在子shell上执行其余代码
我想从perl开始一个新的shell(我通过从perl脚本启动新shell,并在子shell上执行其余代码,perl,Perl,我想从perl开始一个新的shell(我通过exec语句来实现)。当子shell启动时,我希望在新shell上打印一些消息,并希望在子shell上运行另一个perl脚本 我正在这样做: exec $ENV{SHELL}; 请帮助。取决于您想做什么 exec()将返回而不显示输出/状态,并且不会分叉 system()将从Perl进程分叉并返回一个状态(exitcode) 我想你想要的是回来`` 看看哪一个有一些关于如何捕获外部命令输出的好例子。请注意,backticks不使用fo
exec
语句来实现)。当子shell启动时,我希望在新shell上打印一些消息,并希望在子shell上运行另一个perl脚本
我正在这样做:
exec $ENV{SHELL};
请帮助。取决于您想做什么
- exec()将返回而不显示输出/状态,并且不会分叉
- system()将从Perl进程分叉并返回一个状态(exitcode)
qx
来代替backticks
示例:
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";
其他脚本示例:
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。我认为您需要的是
use strict;
use warnings;
open my $fh, '|-', $ENV{SHELL};
print $fh <<'EOF';
echo "$0: From shell goes hell"
EOF
注意打开我的$fh,“|-”,$ENV{SHELL}
只是打开我的$fh,“|-”或exec$ENV{SHELL}的语法糖代码>其中,打开我的$fh,“|-”
是一些管道
,关闭
,重复
,叉子
杂耍的语法糖
但是这个代码不起作用
use strict;
use warnings;
my $script = <<'EOF';
echo "$0: From shell goes hell"
EOF
close STDIN;
open STDIN, '<', \$script; # this is not real file handler!
exec $ENV{SHELL};
使用严格;
使用警告;
my$script=显示如何使用“exec语句”。e、 g.展示你尝试过的东西(您可以编辑您的问题)不会有带有exec
的子shell(子shell仅由fork()创建)。您的perl脚本将被您执行的任何程序所取代。恰当的术语应该是执行壳。请您重新表述您的问题,以便我们更好地理解它。请在执行包含simple exec$ENV{SHELL}的perl脚本之前和之后检查ps命令的输出。它实际上会创建一个子shell