Проблема с поиском в регулярных выражениях Perl и замена переменной среды - PullRequest
1 голос
/ 28 октября 2019

Я использую виртуальную машину GCE с Ubuntu 18 и у меня возникают проблемы с командой 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"

Что я делаю не так?

1 Ответ

3 голосов
/ 28 октября 2019

По умолчанию (и по замыслу), 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...