gpt4 book ai didi

linux - perl $ENV 没有得到 linux bash var 的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:02 30 4
gpt4 key购买 nike

以下 shell 脚本在我从 Linux 提示符下执行时工作正常,但是当它被 Unix 服务(例如 inetd 等)调用时,它无法识别 $ACT_NUM 变量在 Perl 脚本中。

export ACT_NUM=$1
perl -pi -e '$v=$ENV{ACT_NUM};s/TRIGGER_VALUE" value="\d*"/TRIGGER_VALUE" value="$v"/>//' soa_triggering.xml

soa_triggering.xml 内容文件是

<ins:Parameter name="TRIGGER_VALUE" value="1"/>

最佳答案

我认为你的问题比 $1 的扩展更基本 - 我会冒险猜测正则表达式不匹配 - 因为:

$v=$ENV{ACT_NUM};s/TRIGGER_VALUE" value="\d*"/TRIGGER_VALUE" value="$v"/>//

实际上是语法错误 - 您正在使用 / 作为正则表达式分隔符,但您试图将其包含在您的模式中。

因此,如果您实际运行这段代码,您会得到:

Useless use of numeric gt (>) in void context 

所以也许您需要考虑转义一些元字符:

这个有效:

#!/usr/bin/env perl
use strict;
use warnings;

$ENV{ACT_NUM} = 1;

while ( <DATA> ) {
my $v=$ENV{ACT_NUM};
s/TRIGGER_VALUE\" value=\"\d*\"/TRIGGER_VALUE\" value=\"$v\"/;
print;
}

__DATA__
<ins:Parameter name="TRIGGER_VALUE" value="1"/>

但实际上 - 使用正则表达式来处理 XML 是一个 inherently bad idea .

您可能还需要仔细检查该环境是否确实在传播。如果您print $v(或$ENV{ACT_NAME})它真的有效吗?

那么怎么样:

#!/usr/bin/env perl
use strict;
use warnings;

use XML::Twig;

my $twig = XML::Twig->new(
twig_handlers => {
'ins:Parameter[@name="TRIGGER_VALUE"]' =>
sub { $_->set_att( 'value', $ENV{ACT_NUM} ) }
}
);
$twig->parse(
do { local $/; <> }
)->print;

关于linux - perl $ENV 没有得到 linux bash var 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38204032/

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