gpt4 book ai didi

perl - 是否可以使 'exec' 在 Perl 中使用 '$SHELL -c' 而不是 '/bin/sh -c'?

转载 作者:行者123 更新时间:2023-12-04 12:13:21 26 4
gpt4 key购买 nike

在 Perl 中,是否可以让 'exec'、'system' 和 'qx' 使用除/bin/sh 之外的 shell(不使用像 'exec "$SHELL -c ..."这样的结构) , 而无需重新编译 perl)?

编辑:这个问题的动机是一个 bash 脚本,它执行“export -f foo”,然后在子 shell 中使用 perl 直接通过“系统“foo””调用该函数。我不确定这种技术是否适用于所有 sh,尽管“system”/bin/bash -c foo“”可能适用于那种情况,但我不希望导出的函数通过/bin/的所有变体传播嘘。但主要是我只是好奇,现在很好奇如何将解决方案扩展到 qx。此外,由于我对非 unix 平台一无所知,我想避免在解决方案中对替代 shell 的路径进行硬编码。

最佳答案

您可以覆盖execsystem。参见 perldoc perlsub有关详细信息,但这大致是您想要的(模数一些我不想尝试修复的引用错误):

#!/usr/bin/perl

use strict;
use warnings;

use subs qw/system/;

sub system {
#handle one arg version:
if (@_ == 1) {
return CORE::system "$ENV{SHELL} -c $_[0]";
}
#handle the multi argument version
return CORE::system @_;
}

print "normal system:\n";
system "perl", "-e", q{system q/ps -ef | grep $$/};

print "overloaded system:\n";
system 'ps -ef | grep $$';

关于perl - 是否可以使 'exec' 在 Perl 中使用 '$SHELL -c' 而不是 '/bin/sh -c'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1251524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com