我正在记录一些命令以供将来使用,其中一些命令太长,我想将它们记录在多行中以便可视化,然后只需复制并粘贴它们即可使用。例如:
生的:
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
除最后一行外,每一行都以反斜杠结束。以您的命令为例:
openssl pkcs12 -export \
-in intermediate/certs/lala-lira.cert.pem \
-inkey intermediate/private/lala-lira.key.pem \
-out intermediate/private/lala-lira.pfx
您在这里所做的是转义行尾,导致 shell 将其视为非分隔空格。由于转义标记仅对下一个字符有影响,因此下一个字符必须成为行尾。 (这意味着不允许有尾随空格;要小心!)
答案2
您可以创建一个函数(或 shell 脚本)来包装文本并分配反斜杠:
function wrapit { fmt -s -w 50 - | sed '$!s/$/ \\/'; }
这使用FMMT工具将文本换行为 50 个字符(根据需要进行调整)。它还告诉仅fmt
( s
) 分割,这样它就不会在输入中加入任何短行。然后它使用 sed 向除最后一行之外的每一行添加反斜杠:
$
是文件最后一行的地址!
意味着在执行以下操作的行上应用后续命令不是匹配给定的地址(这里是除最后一行之外的所有地址)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
但如果您需要针对多种输入的脚本化解决方案,我想提供一个通用答案。