Когда ваш друг предложил использовать shutdown 0
, возможно, предполагаемая команда на самом деле должна была быть:
sudo init 0
Если вы используете 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
каждый раз, когда запускается оболочка.