管道从交互式命令输出到更少

我想要做类似的事情

openssl enc -d -aes256 -in somefile | less

openssl需要stdin密码。 当涉及less时候,这一切都会搞砸。

有没有办法从交互式命令(如openssl要求输入密码)中获取输出并将输出传递到less

或者有更好的技术使用bash脚本?


也许有shell脚本要求密钥,然后将密钥存储在临时文件中,并使用openssl的-kfile选项来查找它。 希望你的openssl版本支持-kfile。

我担心这个安全问题,但有点小心,安全漏洞可能比您想象的要小。 (但是你相信你的系统管理员和sudoers ...?)

#!/bin/bash

INFILE=somefile

read -s -p "Enter key for $INFILE: " key
echo

# write the key to a temp file; use mktemp(1)
# for safer creation of a privately-owned file.
#
TMPKEY=$(mktemp -t) || exit 1
echo "$key" > "$TMPKEY"

# will remove the temp file on script exit
trap 'rm -f "$TMPKEY"' EXIT

# remove the key file a couple seconds after openssl runs
(sleep 2; rm -f "$TMPKEY") &

openssl enc -d -aes256 -in "$INFILE" -kfile "$TMPKEY" | less

[ -f "$TMPKEY" ] && rm -f "$TMPKEY"
trap - EXIT

# rest of script...

exit 0

你可以试试这个:

echo 'mypassword' | openssl enc -d -aes256 -in somefile | less

但这看起来并不安全。

我没有试过用这种方式运行openssl ,但是如果它太冗长,并且以前的代码不起作用,那么你总是可以尝试使用expect。 这是一个例子:

expect -c '
    spawn yourscript
    expect "Please enter your password:"
    send "$PASSWORD"
'
链接地址: http://www.djcxy.com/p/73871.html

上一篇: pipe output from interactive command to less

下一篇: jquery html() vs empty().append() performance