我尝试阅读bash命令的输出' openssl help'并将其放在一个字符串变量中以便进一步处理。
准确地说,我想测试所有密码命令。
首先,我尝试阅读命令输出' openssl ciphers'。但我只得到了密码而不是密码命令。但是,如果我键入' openssl help'然后显示密码命令。问题是现在命令的输出没有保存在我的变量中。
CIPHER=`openssl ciphers`
echo "Output:"
echo $CIPHER
这很有效。但不幸的是,$ CIPHER的内容并不是我所需要的。
CIPHER=`openssl help`
echo "Output:"
echo $CIPHER
这不起作用。变量CIPHER为空。为什么?
答案 0 :(得分:1)
似乎openssl help
内容会写入标准错误流stderr(2)
而不是stdout(1)
。建议将错误流(由文件描述符2表示)重新引导到标准输出(由文件描述符1表示)以解决问题。
由于输出包含多行流,建议使用适当的双引号将$(..)
命令替换括在反引号(过时技术)上。
sslOutput="$(openssl help 2>&1)"
printf "%s\n" "${sslOutput}"
了解原因$(..)
is prefereed over legacy ..
syntax for command substitution.