使用perl-regex搜索并替换为环境变量时出现问题



我在Ubuntu 18上运行一个GCE虚拟机,但perl命令有问题。

export ip_addr=`hostname -i`
echo "set $ip_addr_priv "{my_ip_address}"" | sudo perl -n -e 's/($ip_addr_priv) +"{([a-zA-Z0-9_]+)}"/1 "$ENV{ip_addr}"/g; print;'

当我在命令行中运行它时,我得到以下输出:

set $ip_addr_priv ""

而不是像这样的东西:

set $ip_addr_priv "127.0.0.1"

我做错了什么?

默认情况下(以及设计情况下(,sudo不会将当前用户的环境传递给新进程。

可以使用-E命令行标志覆盖此行为。

echo "set $ip_addr_priv "{my_ip_address}"" | sudo perl -n -e 's/($ip_addr_priv) +"{([a-zA-Z0-9_]+)}"/1 "$ENV{ip_addr}"/g; print;'
set $ip_addr_priv ""

Vs:

echo "set $ip_addr_priv "{my_ip_address}"" | sudo -E perl -n -e 's/($ip_addr_priv) +"{([a-zA-Z0-9_]+)}"/1 "$ENV{ip_addr}"/g; print;'
set $ip_addr_priv "127.0.1.1"

最新更新