Как разделить & ldquo; / proc / * / environ & rdquo; файл в отдельных строках?

Я пытаюсь получить содержимое любого файла /proc/*PID*/environ в более читаемом формате. Я могу сделать это так, как показано ниже, но я уверен, что это не так.

$ cat "/proc/$(pgrep gnome-session -n -U $UID)/environ" USER=spasTEXTDOMAIN=im-configXDG_SEAT=seat0XDG_SESSION_TYPE=waylandSHLVL=1QT4_IM_MODULE=ximHOME=/home/spasDESKTOP_SESSION=ubuntuGNOME_SHELL_SESSION_MODE=ubuntuDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busIM_CONFIG_PHASE=2LOGNAME=spasGTK_IM_MODULE=ibusJOURNAL_STREAM=9:147845_=/usr/bin/gnome-sessionUSERNAME=spasXDG_SESSION_ID=70PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binXDG_RUNTIME_DIR=/run/user/1000LANG=en_US.UTF-8XDG_CURRENT_DESKTOP=ubuntu:GNOMEXDG_SESSION_DESKTOP=ubuntuXMODIFIERS=@im=ibusSHELL=/bin/bashGDMSESSION=ubuntuTEXTDOMAINDIR=/usr/share/locale/XDG_VTNR=2QT_IM_MODULE=ximPWD=/home/spasCLUTTER_IM_MODULE=ximXDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktopXDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg $ cat -e "/proc/$(pgrep gnome-session -n -U $UID)/environ" USER=spas^@TEXTDOMAIN=im-config^@XDG_SEAT=seat0^@XDG_SESSION_TYPE=wayland^@SHLVL=1^@QT4_IM_MODULE=xim^@HOME=/home/spas^@DESKTOP_SESSION=ubuntu^@GNOME_SHELL_SESSION_MODE=ubuntu^@DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus^@IM_CONFIG_PHASE=2^@LOGNAME=spas^@GTK_IM_MODULE=ibus^@JOURNAL_STREAM=9:147845^@_=/usr/bin/gnome-session^@USERNAME=spas^@XDG_SESSION_ID=70^@PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin^@XDG_RUNTIME_DIR=/run/user/1000^@LANG=en_US.UTF-8^@XDG_CURRENT_DESKTOP=ubuntu:GNOME^@XDG_SESSION_DESKTOP=ubuntu^@XMODIFIERS=@im=ibus^@SHELL=/bin/bash^@GDMSESSION=ubuntu^@TEXTDOMAINDIR=/usr/share/locale/^@XDG_VTNR=2^@QT_IM_MODULE=xim^@PWD=/home/spas^@CLUTTER_IM_MODULE=xim^@XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop^@XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg^@ $ cat -e "/proc/$(pgrep gnome-session -n -U $UID)/environ" | sed 's/\^@/\n/g' USER=spas TEXTDOMAIN=im-config XDG_SEAT=seat0 XDG_SESSION_TYPE=wayland ...

Возможно, мне нужно назначить определенное значение $IFS, но что это такое? Каков правильный способ достижения вышеуказанного результата?

8
задан 21 November 2017 в 13:35

33 ответа

Вы можете использовать strings следующим образом:

strings /proc/$(pgrep gnome-session -n -U $UID)/environ

Образец вывода:

$ strings /proc/$(pgrep gnome-session -n -U $UID)/environ
GNOME_KEYRING_PID=
LANGUAGE=en_US
J2SDKDIR=/usr/lib/jvm/java-8-oracle
LC_TIME=en_US.UTF-8
XDG_SEAT=seat0
XDG_SESSION_TYPE=x11
COMPIZ_CONFIG_PROFILE=ubuntu
SESSION=ubuntu

man strings

NAME

   strings - print the strings of printable characters in files.

ОПИСАНИЕ

   For each file given, GNU strings prints the printable character
   sequences that are at least 4 characters long (or the number given with
   the options below) and are followed by an unprintable character.  By
   default, it only prints the strings from the initialized and loaded
   sections of object files; for other types of files, it prints the
   strings from the whole file.

   strings is mainly useful for determining the contents of non-text
   files.
5
ответ дан 9 August 2018 в 00:27
  • Вы можете использовать cut:
    cut -d '' -f1- --output-delimiter=$'\n' /proc/$pid/environ
    
    , используя нуль в качестве разделителя, и вывод разделителя новой строки, необязательно выбирающий только определенные поля / строки.
  • Или фильтруйте через tr, перевод нулей в строки новой строки:
    tr '\0' '\n' </proc/$pid/environ
    
  • Или просто придерживайтесь версии sed ...
10
ответ дан 14 August 2018 в 18:39
  • 1
    Я использую tr '\0' '\n' с тех пор, как могу вспомнить. Это самый интуитивный способ выразить «замену всех NUL новыми символами» и, следовательно, мое личное предпочтительное решение. – egmont 21 November 2017 в 23:40

Вы можете использовать strings следующим образом:

strings /proc/$(pgrep gnome-session -n -U $UID)/environ

Образец вывода:

$ strings /proc/$(pgrep gnome-session -n -U $UID)/environ
GNOME_KEYRING_PID=
LANGUAGE=en_US
J2SDKDIR=/usr/lib/jvm/java-8-oracle
LC_TIME=en_US.UTF-8
XDG_SEAT=seat0
XDG_SESSION_TYPE=x11
COMPIZ_CONFIG_PROFILE=ubuntu
SESSION=ubuntu

man strings

NAME

   strings - print the strings of printable characters in files.

ОПИСАНИЕ

   For each file given, GNU strings prints the printable character
   sequences that are at least 4 characters long (or the number given with
   the options below) and are followed by an unprintable character.  By
   default, it only prints the strings from the initialized and loaded
   sections of object files; for other types of files, it prints the
   strings from the whole file.

   strings is mainly useful for determining the contents of non-text
   files.
5
ответ дан 14 August 2018 в 18:39

Другие вопросы по тегам:

Похожие вопросы: