我在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"