我有一个名为password-for-object
的脚本,我通常会这样运行:
$ password-for-object example.com
sOtzC0UY1K3EDYp8a6ltfA
即。它执行复杂的哈希计算并输出密码,我在访问名为example.com
的对象(例如,网站)时应该使用该密码。我只需双击整个密码,就会将其复制到我的缓冲区中,然后将其粘贴到表单中。
我还学会了如何在不使密码可见的情况下使用这样的脚本的技巧:
$ password-for-object example.com | xclip
这样,脚本的输出最终会出现在X的主缓冲区中,我可以将其直接插入到表单中的密码字段中,并且它不会显示在屏幕上。
这种方式唯一的问题是password-for-object
输出一个带尾随换行符的字符串,因此“xclip”总是会捕获一个额外的符号 - 这个换行符。如果我在password-for-object
中省略了换行符的输出,那么我最终会遇到没有xclip的混乱字符串,即当我把它放在标准输出上时。我使用2个shell:zsh和bash,我将在zsh中获得以下内容(注意额外的%符号):
$ password-for-object example.com
sOtzC0UY1K3EDYp8a6ltfA%
$
或者bash中的以下内容(注意提示将在同一行开始):
$ password-for-object example.com
sOtzC0UY1K3EDYp8a6ltfA$
有关如何解决此问题的任何想法?是否有可能以某种方式修改脚本,以便检测到xclip在管道中,如果不是则只输出换行符?
答案 0 :(得分:2)
如果您更改password-for-object
以便它不输出换行符,您可以使用以下脚本调用它:
#!/bin/bash
password-for-object "$1"
if [ -t 1 ]
then
echo
fi
-t
条件在the bash manual中描述为:
-t fd
如果文件描述符fd已打开并且引用终端,则为真。
请参阅以下问题:
答案 1 :(得分:1)
尝试一下:
$ password-for-object example.com | tr -d '\n' | xclip
tr -d'\ n'删除换行符