0

由于这组特定功能所需的选项和开关的数量,我希望创建一个简单的 bash 别名。这是背景信息,而不是问题。

要执行有问题的命令需要一个密码短语(通常在多个位置),我想最小化它并同时提供其他用户的一些隐私。

这是别名示例...

alias test="read -sp 'Enter passphrase: ' pass; gpg --batch --passphrase $pass --symmetric --cipher-algo aes256 -o file.ext.gpg file.ext"

别名工作正常,提示用户输入密码并将其应用于解密过程。

这是问题:如果我加密文件并输入密码(不使用上面示例中所示的 read -sp utlity)加密文件密码与我使用“读取”二进制文件来屏蔽输入不同。

如果我显示使用 read -sp 捕获的 $pass 的内容,它会在我输入时显示,没有任何额外的行尾等。

有人经历过吗?

4

2 回答 2

3

你不应该引用$pass吗?如果它包含空格等。此外,您需要$在设置别名时转义以使其不扩展。

所以:

alias test="read -sp 'Enter pp: ' pass; gpg --passphrase \"\$pass\" --batch --symmetric --cipher-algo aes256 -o file.ext.gpg file.ext"

除此之外,您可能希望使用--passphrase-fd这样的密码短语不会在ps输出中结束:

alias test="read -sp 'pp: ' pass; gpg --passphrase-fd 3 --etc-etc 3<<< \$pass"
于 2012-09-20T10:19:10.650 回答
0

shell 函数会更简单,因为您消除了引用级别,并且如果需要将函数推广到其他文件,则允许参数。

# There is already a standard command called 'test'; use a different name
pass_encrypt () {
  in=$1
  out=$in.gpg
  read -rsp 'Enter passphrase: ' pass
  gpg --batch --passphrase-fd 3 --symmetric \
      --cipher-algo aes256 -o "$out" "$in" 3<<<$pass
}

(与 mvds 的使用建议--passphrase-fd

于 2012-09-20T12:42:19.303 回答