我正在使用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
1条答案
按热度按时间guicsvcw1#
我不知道为什么,但是在命令字符串中放置双引号字符需要额外的转义级别。您需要在JSON字符串中编码一个反斜杠,然后编码一个双引号字符,如下所示:
\\\"
.请注意,如果切换到使用
args
字段,则该字段中的对象可以使用quoting
字段来控制引用行为。相关GitHub问题票证:也可能是All double quotes removed from command in tasks.json in powershell #72039。