我的 Docker 撰寫檔案中有類似的內容:
command: >
bash -c "
...some statements here...
gcloud ...some params... --ddl=\
\"CREATE TABLE ....; \
CREATE UNIQUE INDEX...; \
CREATE UNIQUE INDEX...; \
CREATE TABLE ...; \
CREATE TABLE ...; \
CREATE TABLE ...;\"
"
這里的問題似乎是反斜杠\在字串“...”中無法正常作業,您可以在其中看到一些(為便于閱讀而截斷)DDL 陳述句。我該如何解決?我試圖\用\\,\n\但沒有一個作業。
uj5u.com熱心網友回復:
有一個網站說明了在 yaml 中執行多行字串的不同方法,https: //yaml-multiline.info ,但不幸的是,他們的示例中沒有涵蓋這種特殊情況。
您遇到的問題是,在 bash 中,在雙引號內,我們不需要轉義回車。洗掉結尾的轉義行--ddl=\并將下一個雙引號移到那里也是最簡單的,這樣參考的文本就從該點開始。此外,我們需要在 yaml 多行語法中使用>-. 所以結果是:
command: >-
bash -c "
...some statements here...
gcloud ...some params... --ddl=\"
CREATE TABLE ....;
CREATE UNIQUE INDEX...;
CREATE UNIQUE INDEX...;
CREATE TABLE ...;
CREATE TABLE ...;
CREATE TABLE ...;\"
"
使用dasel我們可以看到命令中的文本塊的解釋與 yaml 中看到的完全一樣:
$ dasel -f test-2.yaml --format '{{ .command }}'
bash -c "
...some statements here...
gcloud ...some params... --ddl=\
\"CREATE TABLE ....;
CREATE UNIQUE INDEX...;
CREATE UNIQUE INDEX...;
CREATE TABLE ...;
CREATE TABLE ...;
CREATE TABLE ...;\"
"
如果我們復制完整的參考bash -c塊并改為使用echo,我們可以看到bash將解釋的命令:
$ echo "
...some statements here...
gcloud ...some params... --ddl=\"
CREATE TABLE ....;
CREATE UNIQUE INDEX...;
CREATE UNIQUE INDEX...;
CREATE TABLE ...;
CREATE TABLE ...;
CREATE TABLE ...;\"
"
...some statements here...
gcloud ...some params... --ddl="
CREATE TABLE ....;
CREATE UNIQUE INDEX...;
CREATE UNIQUE INDEX...;
CREATE TABLE ...;
CREATE TABLE ...;
CREATE TABLE ...;"
生成的是有效的 shell 語法。雙引號內的回車不需要轉義,參考的--ddl=值將作為一組有效的 sql 陳述句發送。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483467.html
