【问题标题】:How to omit the user prompt when storing result of eval in a Bash variable?将 eval 的结果存储在 Bash 变量中时如何省略用户提示?
【发布时间】:2020-04-10 16:07:43
【问题描述】:

我想在(备份)shell 脚本中使用 keepassxc-cli 从 Keepass 数据库中检索密码。 (出于安全目的,它宁愿不将其保存在我的文件系统上的文本文件中。)所需的命令如下所示:

/Applications/KeePassXC.app/Contents/MacOS/keepassxc-cli show -a Password --key-file=/path/to/keyfile /path/to/database.kdbx "/path/to/entry/within/database"

在我的终端上手动输入此命令时,系统会提示我输入主密码,然后在输入此主密码后,引用的密码将显示在下一行:

Enter password to unlock /path/to/database.kdbx: <me_entering_my_master_password>
TESTPASSWORD

我的脚本的相关部分如下所示(其中上述命令作为字符串存储在KEEPASSCMD 中,我只是为了调试目的而回显):

REPOPASSWORD=$(eval $KEEPASSCMD)
echo $REPOPASSWORD

但是,在运行脚本时,我没有收到输入主密码的提示,而是在终端上没有显示任何内容。 “盲目”输入我的主密码后,显示如下输出:

Enter password to unlock /path/to/database.kdbx: TESTPASSWORD

也就是说,提示也存储在REPOPASSWORD 中。是否有可能排除提示,所以只有字符串TESTPASSWORD 存储在REPOPASSWORD 中?

【问题讨论】:

    标签: bash shell scripting passwords keepass


    【解决方案1】:

    您使用的是哪个外壳?您的代码在 bash 和 zsh 上都适用于 keepassxc 2.6.2。你试过不用 eval 吗?

    REPOPASSWORD=$(/Applications/KeePassXC.app/Contents/MacOS/keepassxc-cli show -a Password --key-file=/path/to/keyfile /path/to/database.kdbx "/path/to/entry/within/database")
    echo $REPOPASSWORD
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      相关资源
      最近更新 更多