2017-02-13 8 views
0

私はウェブサイトの証明書を取得/チェックするために使用したい機能を持っています。私は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 
} 
+0

:[?なぜエコーよりも優れているのprintf(http://unix.stackexchange.com/questions/65803/why-is-printf-better-than -echo) – codeforester

+0

ベストプラクティスに従えば、問題は消え去ります。 opensslの出力をキャプチャしてエコーする必要はまったくありません。 'content = $(openssl ...);の代わりに。 if ... 'あなたは' openssl ... 'を実行しただけで、出力はstdoutになり、関数はゼロではなく非ゼロを返します。関数の最後の行をopensslの呼び出しにしてください。 –

+0

@WilliamPursell私がラップしたのは、間違ったドメインを入力したときにOpenSSLが接続しようとしたためで、certを持たないか、または443でリッスンしません。 -cert purple.com'ではなく 'get-cert purple.com 80' – LF4

答えて

1
echo ${content} 

この行は、単語にコンテンツを壊すと、それらをスペースで区切るエコーの引数として、各単語を渡します。引用符で囲みます。あなたがこの記事を見てみたいことがあり

echo "${content}" 
+0

ああ、私は "$()"を引用しましたが、内容を指摘してくれてありがとうございました。それはそれを修正した。ありがとう。 – LF4

+6

皮肉なことに、代入の右辺の展開は単語分割やパス名の拡張の対象ではないので、 '$()'を引用する必要はありませんでした。 – chepner

+0

情報に感謝してよかったです。 – LF4

関連する問題