Tôi đang cố gắng khám phá một số môi trường quy trình khác để có được một env var cụ thể.Sử dụng sed để có được một env var từ/proc/*/environ weirdness với x00
Vì vậy, tôi đã cố gắng một lệnh sed như:
sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/\1/p" /proc/pid/environ
Nhưng tôi nhận được như đầu ra tập tin environ đầy đủ. Nếu tôi thay thế \ 1 chỉ với một chuỗi tĩnh, tôi nhận được rằng chuỗi cộng với toàn bộ tập tin environ:
sed -n "s/\x00ENV_VAR_NAME=\([^\x00]*\)\x00/BLAHBLAH/p" /proc/pid/environ
tôi chỉ nên nhận được "blahblah" trong ví dụ trước. Điều này không xảy ra nếu tôi loại bỏ các ký tự trống và sử dụng một số tập dữ liệu thử nghiệm khác.
này đưa tôi đến với thử chuyển đổi \ x00 để \ của x01, mà dường như làm việc:
cat /proc/pid/environ | tr '\000' '\001' | sed -n "s/\x01ENV_VAR_NAME=\([^\x01]*\)\x01/\1/p"
Tôi có thiếu một cái gì đó đơn giản về sed đây? Hoặc tôi nên chỉ dính vào cách giải quyết này?
này cũng giải quyết vấn đề của tôi với dò dẫm xung quanh với phù hợp với người đầu tiên env var trong tệp không có \ x01 ở phía trước. Cảm ơn nhiều. –
Bạn đã lưu ngày của tôi. Tôi nghĩ rằng đó là cách duy nhất để chuyển một giá trị biến động tới một dịch vụ systemd-start. –
'awk' không hoạt động nếu giá trị biến chứa' = '? ví dụ: 'awk -v 'RS = \ 0' -F = '$ 1 ==" LS_COLORS "{in $ 2}' proc/self/environ' – Jasen