VS Code:使用 WSL/Bash 运行任务

Eva*_*ica 6 bash visual-studio-code windows-subsystem-for-linux

WSL 可以轻松获取 gcc 和其他 Linux 工具。您可以使用脚本快速配置 WSL 开发环境,因此如果您搞砸了某些东西,您可以快速销毁它并以最小的成本重新开始。因此,我想在 WSL 而不是 Windows 本身上运行任务。

例如,在 Sublime3 中,我可以使用 GCC 的 WSL 安装来构建 C 代码,只需使用以下代码创建一个新的构建系统:

{
  "cmd" : ["bash", "-c", "gcc ${file_name} -o ${file_base_name} && ./${file_base_name}"],
  "shell": true,
  "working_dir": "${file_path}",
}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试找出如何在 VS Code 上复制它,但到目前为止还没有成功。似乎至少有一个人已经成功地实现了这一目标,所以这应该是可能的。

看来正确的方法是配置一个tasks.json文件。相关行似乎是:

"command": "bash.exe",
    "args": ["-c", "'insert code here'"]
Run Code Online (Sandbox Code Playgroud)

这似乎告诉 powershell 运行bash -c 'insert code here'。任何人都可以提出正确的命令吗?


一些背景:

${file}是一个代表 VSCode 中活动文件的变量。这是所有预定义变量的列表。

wslpath是 Windows 1803 中发布的新 bash 命令,它采用 Windows 路径并返回 wsl 路径,例如:

$ wslpath "c:\Users\Evan\Google Drive\Development\Programming Languages\file.c"
/mnt/c/Users/Evan/Google Drive/Development/Programming Languages/file.c
Run Code Online (Sandbox Code Playgroud)

我的尝试:

我尝试编写一个脚本来做到这一点,但遇到了问题。要调用的tasks.json语法myscript应该是这样的(请注意,我们将文件名传递给脚本,以便脚本可以将其传递给GCC)。

"args": ["-c", "'myscript.sh \"${file}\"'"]
Run Code Online (Sandbox Code Playgroud)

或者按照这个答案

"command": "/path/to/script.sh"
"args": ["\"${file}\""]
Run Code Online (Sandbox Code Playgroud)

myscript可能看起来像这样:

#!/bin/bash
echo "File Path is here $1"
x=$(wslpath "$1")
gcc "$x" -o a.out
./a.out
Run Code Online (Sandbox Code Playgroud)

VS 代码文档

ida*_*anp 4

无需脚本即可完成:

 "command": "gcc '$(wslpath '${file}')' && ./a.out"
Run Code Online (Sandbox Code Playgroud)

${file}将在 bash 中解析命令之前进行解析。