git 为什么我的VS代码任务定义中的命令字符串的双引号被删除了?

um6iljoc  于 2023-03-16  发布在  Git
关注(0)|答案(1)|浏览(110)

我正在使用VS Code,并尝试在tasks.json中创建一个任务,为用户设置Git用户名和电子邮件地址。
对于我的任务:

{
        "label": "Set Git User",
        "type": "shell",
        "command": "git config --global user.name \"${input:userPrompt}\" ; git config --global user.email \"${input:emailPrompt}\" ",
        "problemMatcher": []
      },

对于输入,我有:

"inputs":[
      {
        "id": "userPrompt",
        "description": "Please enter your Git user name.",
        "default": "",
        "type": "promptString",
      },
      {
        "id": "emailPrompt",
        "description": "Please enter your email address.",
        "default": "",
        "type": "promptString",
      }
    ]

这看起来工作得很好,我得到了输入我的名字和电子邮件的提示,终端打开并显示了我所期望的命令。然而,在它运行之后,用户名只设置为给定的第一个名字,而不是第一个和最后一个。如果我复制VS代码显示的命令并在终端中运行它,它工作正常,并设置了名字和姓氏。这对我来说没有任何意义。如果命令被截断,那么设置电子邮件的部分将无法工作。如果VS代码忽略空格后的输入,那么它将无法工作。t显示为要执行的命令。如果git不喜欢这个空格,那么在终端中执行该命令就不会得到想要的结果。为什么会发生这种情况?
我正在运行VS代码1.76.1,Windows 10,git版本2.33.1

guicsvcw

guicsvcw1#

我不知道为什么,但是在命令字符串中放置双引号字符需要额外的转义级别。您需要在JSON字符串中编码一个反斜杠,然后编码一个双引号字符,如下所示:\\\" .

{
    "label": "Set Git User",
    "type": "shell",
    "command": "git config --global user.name \\\"${input:userPrompt}\\\" ; git config --global user.email \\\"${input:emailPrompt}\\\" ",
    "problemMatcher": []
},

请注意,如果切换到使用args字段,则该字段中的对象可以使用quoting字段来控制引用行为。
相关GitHub问题票证:也可能是All double quotes removed from command in tasks.json in powershell #72039

相关问题