当前位置: 首页 > 知识库问答 >
问题:

VS代码:使用WSL/Bash运行任务

仇炜
2023-03-14

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}",
}

到目前为止,我一直在努力想办法在VS Code上复制这个,但没有成功。似乎至少还有一个人成功地让这个工作了,所以这应该是可能的。

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

"command": "bash.exe",
    "args": ["-c", "'insert code here'"]

这似乎告诉powershell运行bash-c“在此处插入代码”。谁能想出正确的命令?

一些背景:

${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

我的尝试:

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

"args": ["-c", "'myscript.sh \"${file}\"'"]

或者根据这个答案

"command": "/path/to/script.sh"
"args": ["\"${file}\""]

myscript可能看起来像这样:

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

VS代码文档

共有3个答案

申屠瀚海
2023-03-14

为了避免更改默认shell,让它在Powershell中工作,并避免长转义序列,最好使用单独的文件

发射器:

{
            "label": "command name",
            "type": "shell",
            "command": ".\\command_name.bat",
            "problemMatcher": []
}

批处理文件:

bash.exe -c "ssh -T bastion \"for proxy in bunch of different hosts ; do echo \\\$proxy ; ssh \\\$proxy -T -oBatchMode=yes -oStrictHostKeyChecking=no -oConnectTimeout=3 \\\"command --with --parameters\\\" ; done\""
叶鸿煊
2023-03-14

我想出来了。首先,确保您的用户设置配置为使用bash

"terminal.integrated.shell.windows": "C:\\Windows\\sysnative\\bash.exe"

注意"C:\\Windows\\System32\\bash.exe"似乎也可以正常工作。

接下来是你的任务。json应该包含以下行:

"type": "shell",                                        //Uses the default shee (make sure this is set to bash)
"command": "'./path to/your/script.sh'",                //Unix Style Path to the Script (remember, bash is your shell reading this).
"args": ["\"${file}\""],                                //Pass the path to the source code as an arg 
"useWSL": true,                                         //This was suggested somewhere. The script runs fine without it though.... Not sure what this does. 

最后,这里是脚本。确保将行尾更改为LF。否则脚本将无法工作。

#!/bin/bash
echo "Running Script"
echo "Windows File Path $1"           #The Windows file path we passed in as an argument
wslpath=$(wslpath "$1")               #Convert the Windows path to a Unix Style Path
echo "wslpath is $wslpath"
gcc "$wslpath"                        #Compile the file
echo "done" 
./a.out                               #execute the compiled file

然后打开任何C文件并点击Ctrl Shift B并从build task菜单中选择脚本名称,将C文件编译为当前目录中的a.out。

雷晋
2023-03-14

无需脚本即可完成此操作:

 "command": "gcc '$(wslpath '${file}')' && ./a.out"

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

 类似资料:
  • 我已经安装了Creator更新。WSL正在运行。我可以通过简单地调用来执行大多数. exe文件。我不能使用默认的命令或调用...我也尝试过和。为什么VS Code不像其他程序一样执行?有没有办法启用命令? 编辑:我现在得到以下错误: me@mypc:/mnt/c/Users/me/Documents/project\u文件夹$code/mnt/c/程序文件(x86)/Microsoft VS代码/

  • 虽然其他问题涉及如何使用git-bash之类的东西,但将新的WSL作为VS代码的终端是不一样的:它使您能够访问在实际的Ubuntu Linux子系统上运行的bash,而不是在Windows子系统上运行的git-bash终端。 那么,我们如何使它作为VS代码终端工作,特别是如何使它作为功能开发环境终端工作呢? 与git-bash不同,不幸的是,这不是那么简单,因为WSL中的Ubuntu Linux配

  • 如何从Visual Studio代码中将Windows Bash作为运行任务运行? 以下是我多次尝试来完成此操作。 RunShellScript.bat只有这一行:bash myShellScript.sh。如果您从开始打开cmd并键入该行,它将执行。如果您双击该文件,它也可以完美运行。但是,当从VSCode启动时,该输出将挂起,直到我终止它。 尝试数2: 这也挂着,就像上面一样。 第三次尝试:

  • 有人知道如何设置使用cmd的按钮吗?

  • 我是编程新手,刚开始学习JS。我尝试在Visual Studio代码上通过“code runner”运行我的第一个代码,但它没有给我输出。在此处输入图像描述

  • 当本地机器的计算资源有限时,可以通过云计算服务获取更强大的计算资源来运行本书中的深度学习代码。本节将介绍如何在AWS(亚马逊的云计算服务)上申请实例并通过Jupyter记事本运行代码。本节中的例子有如下两个步骤。 申请含一个K80 GPU的p2.xlarge实例。 安装CUDA及相应GPU版本的MXNet。 申请其他类型的实例或安装其他版本的MXNet的方法与本节类似。 申请账号并登陆 首先,我们