Как определить переменную глобально

Если у вас есть GNUgrep(по умолчанию в Linux ), вы можете сделать:

grep -Po '(^|\s)\S{64}(\s|$)' file

-Pвключает Perl-совместимые регулярные выражения, которые дают нам\b(слова -границы)\S(не -пробелы )и{N}(находят ровно N символов ), а -oозначает «печатать только совпадающую часть строки. Затем мы ищем участки не -пробела длиной ровно 64 символа, которые находятся либо в начале строки (^), либо после пробела('s)и которые заканчиваются либо в конце строки ($), либо другим пробельным символом.

Обратите внимание, что результат будет включать любые пробельные символы в начале и в конце строки, поэтому, если вы хотите продолжить синтаксический анализ, вы можете использовать это вместо этого:

grep -Po '(^|\s)\K\S{64}(?=\s|$)'

Это будет искать пробельный символ или начало строки (\s|^), затем отбрасывать его \Kи затем искать 64 не -пробельных символа, за которыми следует ((?=foo)называется " lookahead " и не будет включаться в соответствие )ни символа пробела, ни конца строки.

1
06.03.2021, 15:40
2 ответа

Решение:

В /etc/security/pam_env.confдобавить:

SSH_AUTH_SOCK  DEFAULT=${XDG_RUNTIME_DIR}/ssh-agent.socket

Другие полезные подробности:

Почему /etc/environmentизначально не работало?:

/etc/environmentследует формату, отличному от ~/.pam_environmentили /etc/security/pam_env.conf, , как описано здесь:

/etc/environment:

VARIABLE=value

~/.pam_environmentи/etc/security/pam_env.conf:

VARIABLE [DEFAULT=value] [OVERRIDE=value]

Значит, я просто не в том формате.

Зачем использовать /etc/security/pam_env.confвместо двух других?:

Потому что это был единственный вариант, который полностью работал сейчас и будет работать в будущем.

/etc/environmentне считывает переменные окружения, поэтому ${XDG_RUNTIME_DIR}не работает. Вы можете жестко запрограммировать содержимое $XDG_RUNTIME_DIR, но переменная (и ее каталог )устанавливаютсяpam_systemdдинамически для каждого -пользователя. Таким образом, это не лучший вариант.

~/.pam_environmentуспешно выполнит ту же задачу, что и /etc/security/pam_env.conf, но она «устарела и будет удалена в какой-то момент в будущем»(commit). Поэтому для будущей проверки -его не следует использовать.

Таким образом, остается /etc/security/pam_env.conf. Теперь он работает с ${XDG_RUNTIME_DIR}и не устарел.

1
18.03.2021, 22:27

В моей системе /usr/bin/codeне что иное, как сценарий оболочки. Вы можете изменить его, добавив дополнительные операторы экспорта или вызвать его из другого скрипта, сначала экспортируя необходимые переменные env. Например:

#!/bin/zsh

export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"

/usr/bin/code #path to your executable for VSCode

Если мы обсуждаем X11 в среде Linux -, глобальные настройки среды для сеанса X11 можно установить в /etc/X11/Xsessionили лучше в файле, помещенном в каталог /etc/X11/Xsession.d.

Для пользовательских настроек используйте $HOME/.xsessionили альтернативу $HOME/.Xsession, $HOME/.xsessionrc.

Использование этих файлов включено в main/etc/X11/Xsession(по крайней мере, в моей системе Debian ).

2
18.03.2021, 22:27

Теги

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