[英]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.