首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从终端调用elisp时如何处理密码提示

从终端调用elisp时如何处理密码提示
EN

Stack Overflow用户
提问于 2014-06-22 15:27:56
回答 1查看 928关注 0票数 1

我试图使用elisp作为shell脚本语言。我正在编写一个脚本,在那里我需要访问一个用gpg加密的文件。我不知道如何处理密码提示。在下面的示例中,从命令行(bash)调用他的程序。

第一次尝试:

代码语言:javascript
复制
#!/usr/bin/emacs --script 
(setq passwd-file "~/password.gpg") 
  (save-excursion   
    (let ((passwd-buffer (find-file passwd-file)))
      (switch-to-buffer passwd-buffer)
      (princ (buffer-substring 1 30))))

这允许我在终端中输入密码,但密码以明文显示。

二次尝试

代码语言:javascript
复制
#!/usr/bin/emacs --script
(setq passwd-file "~/password.gpg") 
(setq pstring (shell-command-to-string (concat "gpg -d " passwd-file)))
(princ pstring)

这就给出了错误gpg: cannot open tty /dev/tty: No such device or address

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-22 15:51:07

你很可能运气不好。第一个例子表明,即使是read-passwd也不会在非交互式会话中隐藏密码输入,因为insert-file向环境保护局发出了加密文件的请求,而后者又使用read-passwd进行GPG密码输入。

尝试用M-x report-emacs-bug向Emacs维护人员报告这一点,要求他们在非交互式会话中抑制read-passwd中的输入回波。这就是我所期望的行为。

目前,您无法绕过这一限制,因为Emacs不向Emacs Lisp代码公开基础TTY,因此您没有机会手动禁用基础TTY设备上的输入回波。

根据我在编写和贡献相当多的非交互式Emacs程序方面的经验,我个人建议不要将Emacs用于非交互式脚本。对于这样的项目来说,这是一个糟糕的平台。API是有限的,并且有许多隐式行为阻碍了非交互式程序,这是你无法摆脱的。

例如,您不能安全地将命令行参数传递给Emacs,因为Emacs将自动访问其命令行参数中的任何现有文件,从而触发各种副作用,例如提示输入不安全的局部变量等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24352749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档