【问题标题】:Escape apostrophe in docker command在 docker 命令中转义撇号
【发布时间】:2017-10-19 18:22:59
【问题描述】:

我正在尝试通过以下方式使用 docker CLI 命令添加变量:

 docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var '{\"test\": \"test\'2\"}'"

但出现以下错误:

bash: -c: line 0: 在寻找匹配的 `"' 时出现意外的 EOF

bash: -c: line 1: 语法错误:文件意外结束

如果执行以下命令之一,我没有任何错误:

docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var '{\"test\": \"test\`2\"}'"

docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var '{\"test\": \"test2\"}'"

如何在“test'2”值中转义撇号以避免错误?

【问题讨论】:

  • 所以如果你 printf X"airflow variables --set my_var '{\"test\": \"test\'2\"}'"X\\n 你会得到 Xairflow variables --set my_var '{"test": "test'2"}'X 这将告诉你在 arg 4 中有一个普通的 ''{…}' 里面。您可能需要"airflow variables --set my_var '{\"test\": \"test'"\\\'"'2\"}'",它给出airflow variables --set my_var '{"test": "test'\''2"}',这意味着arg 4 = {"test": "test'2"}

标签: bash docker escaping airflow apache-airflow


【解决方案1】:

bash 单引号字符串不能包含单引号。你无法逃脱它。 (参考 https://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes)

试试这个:

bash -c  "airflow variables --set my_var '{\"test\": \"test'\''2\"}'"
# .......................................1.................1..2....2

我对匹配的单引号字符串进行了编号。中间是文字单引号。

【讨论】:

    【解决方案2】:

    使用版本 3,您可以指定 命令数组

    https://docs.docker.com/compose/compose-file/#command

    【讨论】:

      【解决方案3】:

      您可以在第一个单引号之前使用 $ 以便能够在命令中使用转义的单引号。

      所以:

       docker exec -u root  airflowdags_webserver_1 bash -c  "airflow variables --set my_var $'{\"test\": \"test\'2\"}'"
      

      【讨论】:

        猜你喜欢
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 2013-07-13
        • 2021-07-11
        • 2022-11-15
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多