약간 연구 후에 .... 그것은 grep -Ez [...]
cron 작업에서이 작업을 수행하는 올바른 방법이 아닙니다.
/proc/[pid]/environ
리눅스 OS에서는 null 바이트가 레코드 분리 자라는 단점을 가지고있어서 stdout에 출력 할 때 내용이 한 줄, 즉 EOL 문자가없는 것처럼 보입니다.
$ cat -v /proc/$(pgrep -u $LOGNAME gnome-session)/environ
LC_MEASUREMENT=en_IE.UTF-8^@LC_PAPER=en_IE.UTF-8^@LC_MONETARY=en_IE.UTF-8^@LANG=en_US.UTF-8^@GDM_LANG=en_US.UTF-8^@DISPLAY=:1^@USERNAME=USERNAME^@MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins^@XDG_VTNR=2^@XDG_SESSION_ID=2^@USER=USERNAME^@DESKTOP_SESSION=gnome^@PWD=/home/USERNAME^@HOME=/home/USERNAME^@XDG_SESSION_TYPE=x11^@XDG_SESSION_DESKTOP=gnome^@LC_NUMERIC=en_IE.UTF-8^@MAIL=/var/spool/mail/USERNAME^@WINDOWPATH=2^@SHELL=/bin/bash^@XDG_CURRENT_DESKTOP=GNOME^@XDG_SEAT=seat0^@SHLVL=0^@GDMSESSION=gnome^@LOGNAME=USERNAME^@DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus^@XDG_RUNTIME_DIR=/run/user/1000^@XAUTHORITY=/run/user/1000/gdm/Xauthority^@PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl^@LC_TIME=en_IE.UTF-8^@
위의 경우, 나는 cat
와 더불어 -v
null 바이트를 나타내는 플래그.
따라서 해결책은 패턴을 찾는 것입니다. "DBUS_SESSION_BUS_ADDRESS"
null 바이트를 인식합니다. awk
과 gawk
둘 다 그렇지만 휴대용 레코드 분리자를 nul 바이트의 16 진수 코드로 변경하여 다음을 수행하십시오. \x00
$ awk -F 'BEGIN {RS="\x00"} /DBUS_SESSION_BUS_ADDRESS/' /proc/$(pgrep -u $LOGNAME gnome-session)/environ
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
이것은 실제로 nul 바이트가없는 깨끗한 출력을 생성하며 cron
. 경고가 생성되지 않고 전자 메일이 전송되지 않습니다.
pipe
, 그렇다고 큰 문제는 아닙니다.