Почему mutt зависает при запуске gpg в tmux?

Когда ваш друг предложил использовать shutdown 0 , возможно, предполагаемая команда на самом деле должна была быть:

sudo init 0
2
06.02.2016, 17:23
1 ответ

Краткий ответ

Если вы используете bash, то вам подойдет сценарий-оболочка Криса У. Если вы, возможно, используете zsh, вы можете использовать сценарий запуска ~ / .zshenv , чтобы установить GPG_TTY оттуда, без оболочки. Поскольку в bash нет аналогичного сценария запуска (см. Файлы запуска Bash ), вам придется использовать там оболочку.

export GPG_TTY=${TTY}

Немного предыстории: интерактивные и неинтерактивные оболочки

gpg-agent ожидает, что GPG_TTY укажет на tty, с которого он был вызван, чтобы он мог отображать подсказки с парольной фразой безопасным способом. . В руководстве GnuPG предлагается поместить следующее в ~ / .bashrc (или аналогичный):

GPG_TTY=$(tty)
export GPG_TTY

Если вы вызываете mutt непосредственно из своей оболочки, это будет работать: GPG_TTY , Mutt заберет его и передаст в gpg, когда понадобится.

Однако, когда вы запускаете mutt с помощью команды tmux new-window или аналогичных конструкций, есть важное отличие: раньше ваш mutt был в так называемой интерактивной оболочке - то есть вы открыли приглашение оболочки и сами запустили оттуда mutt. tmux new-window запускает неинтерактивную оболочку, так как ваша оболочка нужна только для запуска mutt, и вы не сможете с ней взаимодействовать. В этом случае ванна не будет читать .bash_profile или .bashrc вообще, поскольку они предназначены для настройки вашей оболочки для интерактивного использования.

zsh делает примерно то же самое: .zshrc читается для интерактивных оболочек и пропускается для неинтерактивных. Однако в zsh вы можете указать третий файл запуска , .zshenv , который читается для каждой оболочки, независимо от того, является ли он интерактивным или нет. Следовательно, если вы установите GPG_TTY оттуда, он всегда будет доступен, независимо от того, каким образом Mutt запущен. А поскольку $ TTY - это встроенная переменная оболочки, которая всегда указывает на текущий tty, вы можете избежать накладных расходов на порождение процесса tty каждый раз, когда запускается оболочка.

4
27.01.2020, 21:51

Теги

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