私はウェブサイトの証明書を取得/チェックするために使用したい機能を持っています。私はZSHを使っていますが、BASHでもそのシェルでうまく動作していることを検証するためにZSHをテストしたかったのです。関数から改行を表示しないbash?
この関数はコンテンツを1行で表示しているようで、opensslコマンドから改行を知らない、または保守していないようです。 ZSHはそれをうまく処理し、期待どおりに動作します。
opensslコマンドが返ったときに新しい行に気付くようにするにはどうすればよいですか?
function get-cert() {
if (($# == 2)); then
site_url=${1}
site_port=${2}
elif (($# == 1)); then
site_url=${1}
site_port=443
else
echo -n "Enter site domain to get and view the cert: "
read site_url
echo -n "Enter the port [443]: "
read site_port
site_port=${site_port:-443}
fi
echo " === Getting cert for site ${site_url}:${site_port}"
content="$(openssl s_client -showcerts -servername ${site_url} -connect ${site_url}:${site_port} </dev/null)"
if [[ $? == "0" ]]; then
echo ${content}
else
echo "Failed to get cert for ${site_url}"
fi
}
:[?なぜエコーよりも優れているのprintf(http://unix.stackexchange.com/questions/65803/why-is-printf-better-than -echo) – codeforester
ベストプラクティスに従えば、問題は消え去ります。 opensslの出力をキャプチャしてエコーする必要はまったくありません。 'content = $(openssl ...);の代わりに。 if ... 'あなたは' openssl ... 'を実行しただけで、出力はstdoutになり、関数はゼロではなく非ゼロを返します。関数の最後の行をopensslの呼び出しにしてください。 –
@WilliamPursell私がラップしたのは、間違ったドメインを入力したときにOpenSSLが接続しようとしたためで、certを持たないか、または443でリッスンしません。 -cert purple.com'ではなく 'get-cert purple.com 80' – LF4