web-dev-qa-db-ja.com

インスタントコピー/貼り付けで使用するためにコマンドを複数行で表示するにはどうすればよいですか?

将来の使用のためにいくつかのコマンドを文書化していますが、それらのいくつかは長すぎて、視覚化のために複数行で文書化し、次にそれらをコピーして貼り付けて使用したいと思います。例えば:

生:

openssl pkcs12 -export -in intermediate/certs/lala-lira.cert.pem -inkey intermediate/private/lala-lira.key.pem -out intermediate/private/lala-lira.pfx

プレゼンテーション:

openssl pkcs12 -export
-in intermediate/certs/lala-lira.cert.pem
-inkey intermediate/private/lala-lira.key.pem
-out intermediate/private/lala-lira.pfx

問題は、プレゼンテーションフォームをコピーして貼り付けると、各行が1つの個別の独立したコマンドとして解釈されることです。

3
mikl

すべての行を終了しますが、最後はバックスラッシュで終了します。例としてコマンドを使用するには:

openssl pkcs12 -export \
-in intermediate/certs/lala-lira.cert.pem \
-inkey intermediate/private/lala-lira.key.pem \
-out intermediate/private/lala-lira.pfx

ここで行っているのは、行末をエスケープすることです。これにより、シェルは非区切りの空白として扱います。エスケープマーカーは次の文字にのみ影響するため、次の文字必須は行末になります。 (つまり、末尾のスペースは許可されません。注意してください!)

7
DopeGhoti

テキストを折り返し、円記号を割り当てる関数(またはシェルスクリプト)を作成できます。

function wrapit { fmt -s -w 50 - | sed '$!s/$/ \\/'; }

これは fmt tool を使用して、テキストを50文字に折り返します(必要に応じて調整してください)。また、fmtから(s)への分割のみを指示するため、入力の短い行は結合されません。次に、sedを使用して、最後の行を除くすべての行に円記号を追加します。

  • $はファイルの最後の行のアドレスです
  • !は、notが指定されたアドレスと一致する行(ここでは、最後の行を除くすべて)に後続のコマンドを適用することを意味します
  • s/$/ \\/は「行の終わり」を置き換えるように言います($)スペースとバックスラッシュがあり、最終的に単一のバックスラッシュとして表示するには、バックスラッシュをエスケープする必要があります。

テキストをこの関数/スクリプトにパイプするか、スクリプトを実行してからテキストを入力し、Control-Dでテキストを終了します。

echo "openssl pkcs12 -export -in intermediate/certs/lala-lira.cert.pem -inkey intermediate/private/lala-lira.key.pem -out intermediate/private/lala-lira.pfx" | wrapit

または

$ wrapit
openssl pkcs12 -export -in intermediate/certs/lala-lira.cert.pem -inkey intermediate/private/lala-lira.key.pem -out intermediate/private/lala-lira.pfx

Control-D

これは単純なスクリプトです。コマンドオプションや引用符は理解できません。入力例を次のように変換します。

openssl pkcs12 -export -in \
intermediate/certs/lala-lira.cert.pem -inkey \
intermediate/private/lala-lira.key.pem -out \
intermediate/private/lala-lira.pfx

しかし、さまざまな入力に対してスクリプト化されたソリューションが必要な場合に備えて、一般的な回答を提示したいと思います。

1
Jeff Schaller