2017-06-21 118 views
1

我嘗試讀取bash命令'openssl help'的輸出並將其放入字符串變量中以供進一步處理。Bash腳本讀取'openssl help'的輸出

準確地說,我想測試所有的密碼命令。

首先,我嘗試讀取命令'openssl ciphers'的輸出。但是我只有密碼而不是密碼命令。但是如果我輸入「openssl help」,那麼將顯示密碼命令。問題是現在命令的輸出沒有保存在我的變量中。

CIPHER=`openssl ciphers` 
echo "Output:" 
echo $CIPHER 

This Works。但不幸的是,$ CIPHER的內容不是我所需要的。

CIPHER=`openssl help` 
echo "Output:" 
echo $CIPHER 

這是行不通的。變量CIPHER是空的。爲什麼??

+0

你想'OpenSSL的ciphers'或'OpenSSL的help'? – jww

回答

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.

+0

另請參閱[命令行「用法」是否應打印在stdout或stderr上?](https://stackoverflow.com/q/2199624/608639) – jww