Próbuję przedzierać się przez inne środowiska procesów, aby uzyskać określony env var.Używanie sed, aby uzyskać env var z/proc/*/environ dziwactwa z x00
Więc starałem się sed polecenia jak:
sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/\1/p" /proc/pid/environ
Ale ja dostaję jako wyjście pełny plik środo. Gdybym zastąpić \ 1 z tylko statycznym ciąg, otrzymuję ten ciąg plus cały plik środo:
sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/BLAHBLAH/p" /proc/pid/environ
powinien po prostu być coraz „blahblah” w poprzednim przykładzie. Tak się nie stanie, jeśli pozbędę się znaków zerowych i użyję innego zestawu danych testowych.
to doprowadzić mnie do próby przekształcenia \ x00 \ x01 do tych, które nie wydają się działać:
cat /proc/pid/environ | tr '\000' '\001' | sed -n "s/\x01ENV_VAR_NAME=\([^\x01]*\)\x01/\1/p"
jestem brakuje czegoś proste o sed tutaj? Czy powinienem po prostu trzymać się tego obejścia?
Rozwiązuje to również mój problem z omacku z pasującymi pierwszy env var w pliku, który nie ma \ x01 przed nim. Wielkie dzięki. –
Uratowałeś mi dzień. Myślę, że jest to jedyny sposób przekazania wartości zmiennej dynamicznej do usługi uruchamianej systemd. –
'awk' nie działa, jeśli wartość zmiennej zawiera' = '? np .: 'awk -v 'RS = \ 0' -F = '$ 1 ==" LS_COLORS "{print $ 2}' proc/self/environ' – Jasen