如何将变量从 shell 脚本传递到我的 .muttrc?

如何将变量从 shell 脚本传递到我的 .muttrc?

我想muttmutt-kz实际上 - 我很想迁移到,neomutt但这是一个更大的项目)从中获取我的 SMTP 密码,pass这样我就不必将其以明文形式存储在我的配置文件中,但我不是确定如何正确地将密码传递到我的.muttrc.

这就是我所拥有的.muttrc

source ~/.mutt/pass.sh|
set smtp_pass = $my_pass

然后.mutt/pass.sh包含:

#! /bin/bash
my_pass=$(pass Example/user)

如果我添加echo ${my_pass}pass.sh从命令行运行它,它会回显我的密码。

当我启动时,mutt-kz系统提示我解锁我的passgpg 密钥,因此某些功能正常运行,但是当我尝试从 Mutt 发送邮件时,它会要求我输入 SMTP 密码,如果我不提供密码,则不会发送邮件:“SASL 身份验证失败”)

那么...我如何正确地将变量从我的 shell 脚本传递到我的.muttrc

答案1

该程序~/.mutt/pass.sh必须产生如下所示的输出

set my_pass = swordfish

所以它可以是这样的

#!/bin/sh
echo "set my_pass = swordfish"

请注意,如果您的密码包含某些特殊字符(\'"和空格),您需要引用它。例如,如果您的密码位于文本文件中~/passwords/smtp.txt,则可以使用:

#!/bin/sh
~/passwords/smtp.txt sed 's/["$`\\]/\\&/g; s/^/set my_pass = "/; s/$/"/'

对于密码sword\fish,将打印此内容set my_pass="sword\\fish"

如果您使用 Gnome-keyring 来存储密码,那么您可以使用该secret-tool实用程序从密钥环中读取密码。例如,这就是我用于 Office 365 密码的内容(密码不包含任何需要引用的特殊字符):

source 'printf "set imap_pass="; secret-tool lookup action_url https://login.microsoftonline.com/common/login |'

答案2

另一种可能性是使用反引号扩展。所以你应该能够做到:

my_pass = `pass Example/user`

如果您最终迁移到,neomutt您还可以使用命令行定义变量,即

my_pass=$(pass Example/user) mutt

然后您可以my_pass像示例中那样使用变量。

相关内容