Я пытаюсь пресечь некоторые другие процессы, чтобы получить конкретный env var.Использование sed для получения env var из/proc/*/environment weirdness с помощью x00
Так я пытался с SED команды, как:
sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/\1/p" /proc/pid/environ
Но я получаю в качестве вывода полного файла окружит. Если я заменю \ 1 с только статической строки, я получаю эту строку плюс весь файл ЭНВАЙРОН:
sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/BLAHBLAH/p" /proc/pid/environ
Я просто должен получать «BLAHBLAH» в последнем примере. Этого не происходит, если я избавлюсь от нулевых символов и использую некоторые другие тестовые данные.
Это привело меня попробовать преобразования \ x00 \ x01 к, который делает похоже на работу:
cat /proc/pid/environ | tr '\000' '\001' | sed -n "s/\x01ENV_VAR_NAME=\([^\x01]*\)\x01/\1/p"
Я пропускаю что-то просто о СЭД здесь? Или я должен просто придерживаться этого обходного пути?
Это также решает мою проблему с шарить вокруг с соответствующими первым env var в файле, не имеющем \ x01 перед ним. Большое спасибо. –
Ты спас мой день. Я думаю, что это единственный способ передать значение динамической переменной службе systemd-start. –
'awk' не работает, если значение переменной содержит' = '? например: 'awk -v 'RS = \ 0' -F = '$ 1 ==" LS_COLORS "{print $ 2}' proc/self/environ' – Jasen