[英]How to take a multiline input in bash with newlines using Python code
我正在尝试自动化使用Python在命令行上订购SSL证书的方式。 但是我看到如何格式化用户多行输入的问题。 如何让bash等到输入完成并在单行输出中获得多行输入?
对于订购证书,我们生成的CSR格式如下
-----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkx
fjfawcwkefmFNaWamsdffjawfbjwnfkwmelfmw[wefkwaeifbhwfmamfawfoawfj
cmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAMOf6uvCfqj9SbOg6b+IzO7YdaY3J59+Dkm3lIf9gXRZBohT4qpevoJt
kdfkdsnfjdsnewirubewfwfmoweuewfvwfwkfmlwfoerueyvwamladodfofehJDG
nJRl1sL32iIapTZABqA4e9ai+9HTOyV7bq5yMEqJiKFLh1VBHC+BlqXPIW6VjjXX
YX3jF2/Tp0ZAEG0yoHXr0D4JR+lFIIstsAuIbd529U5Oyl3js9Oxu0IDq//o2gkR
SnVby7uhuFy8rGEs70YP4dTbWs1Lu6QKATszX6V4CXzM9fwThVByeOH/1X/zPQYe
amCPR+c0nySBI+bQaISBxvyO/T8RKTMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IB
AQAxLFqyKABFeUIMTzWzOIWz8q9M0uWcMMdxA7+485F0m0QqSYIDHKjf7NnoIUZu
sPx+S9pQE3WZklaX1Kd/m7VEwhgI4ZVDJhnGAfxF4GDlLO8sVIZj2VcDcfypZ9U5
hWP1lCUx+2MIDhqZhMI/vEr0jipKdigMiPeHt/Dy3DpM5qdt2zjUZm9uZvP1/Azf
BTc6yaTwCTDuvGLgSJj5mqIxbDHjv/IQjxAnuzcN81pKEgXaYvGyQLuBTEDjq2qW
pxbKF8NfVOzcoK8afu/GPt4FrtxWoRg/jUUztyjVRKBrSwvmrzAfiV2yCNb0/sTK
Ffc3zbKLapk5/ZXrevrZJ2p4
-----END CERTIFICATE REQUEST-----
我将此作为用户输入,您可以看到它的格式设置,它每次都使用换行符。 但是,由于bash将换行符视为命令,因此它给了我错误。 我的问题或多或少与此类似: 如何将多行文件转换为带有换行符的bash字符串?
尝试了一个while循环,看起来像这样:
csr = ""
c = input("Enter CSR:")
while True:
if "\n" in c:
csr += c
csr.replace("\n", "")
break
但不能如所述那样工作。
预期的结果是这样的:
-----BEGIN CERTIFICATE REQUEST-----MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkxfjfawcwkefmFNaWamsdffjawfbjwnfkwmelfmw[wefkwaeifbhwfmamfawfoawfjcmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOf6uvCfqj9SbOg6b+IzO7YdaY3J59+Dkm3lIf9gXRZBohT4qpevoJtkdfkdsnfjdsnewirubewfwfmoweuewfvwfwkfmlwfoerueyvwamladodfofehJDGnJRl1sL32iIapTZABqA4e9ai+9HTOyV7bq5yMEqJiKFLh1VBHC+BlqXPIW6VjjXXYX3jF2/Tp0ZAEG0yoHXr0D4JR+lFIIstsAuIbd529U5Oyl3js9Oxu0IDq//o2gkRSnVby7uhuFy8rGEs70YP4dTbWs1Lu6QKATszX6V4CXzM9fwThVByeOH/1X/zPQYeamCPR+c0nySBI+bQaISBxvyO/T8RKTMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAxLFqyKABFeUIMTzWzOIWz8q9M0uWcMMdxA7+485F0m0QqSYIDHKjf7NnoIUZusPx+S9pQE3WZklaX1Kd/m7VEwhgI4ZVDJhnGAfxF4GDlLO8sVIZj2VcDcfypZ9U5hWP1lCUx+2MIDhqZhMI/vEr0jipKdigMiPeHt/Dy3DpM5qdt2zjUZm9uZvP1/AzfBTc6yaTwCTDuvGLgSJj5mqIxbDHjv/IQjxAnuzcN81pKEgXaYvGyQLuBTEDjq2qWpxbKF8NfVOzcoK8afu/GPt4FrtxWoRg/jUUztyjVRKBrSwvmrzAfiV2yCNb0/sTKFfc3zbKLapk5/ZXrevrZJ2p4------END CERTIFICATE REQUEST-----
但是,当我在终端中输入CSR作为输入时,就会出现如下错误:
$ MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkx
bash: MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCVVMxEzARBgNVBAgMCk5ldyBKZXJzZXkx: command not found
$ ETAPBgNVBAcMCFJvc2VsYW5kMREwDwYDVQQKDAhBRFAsIExMQzEfMB0GA1UEAwwW
bash: ETAPBgNVBAcMCFJvc2VsYW5kMREwDwYDVQQKDAhBRFAsIExMQzEfMB0GA1UEAwwW: command not found
$ cmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
bash: cmVjcnVpdGluZy1pYXQuYWRwLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC: command not found
有人可以告诉我一种在bash中输入多行然后将密钥放在一行中的方法吗?
您可以使用bash命令读取多行内容,例如
myVar=$(</dev/stdin)
并且您需要在最后输入Ctrl + D来关闭输入流。
如果您正在寻找python代码,则可能需要将输入语句包含在循环中。 像这样:
print("Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it.")
contents = []
while True:
try:
line = input()
except EOFError:
break
contents.append(line)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.