【问题标题】:VSCode using Remote SSH - Run Tasks on Host MachineVSCode 使用远程 SSH - 在主机上运行任务
【发布时间】:2021-09-14 02:56:23
【问题描述】:

我使用 VSCode 的 Remote - SSH 插件通过 SSH 连接到远程服务器。我想用本地机器上远程文件的路径运行一个任务。

具体来说,我在远程机器上有一个 HTML 文件,我想在本地 Windows 机器上使用 URL 进行预览/交互。

我的 task.json 应该如下所示:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Open Remote HTML",
            "type": "shell",
            "command": "start https://url_to_remote.com/${file}"
        }
    ]
}

编辑:此外,我有一些任务应该继续在远程计算机上运行,​​我希望可以选择在本地或主机上按每个任务运行。

【问题讨论】:

  • 如果我理解正确的话,你想在 VSCode 中设置一个任务来在你的本地机器上运行一个命令来打开浏览器并访问你远程机器上的文件吗?如果是这样,一种无需任务的方法:在远程机器上设置一个静态 Web 服务器,然后在 alt-tab 到 Firefox 并在加载的页面上按 F5。另一种方法是在远程计算机上设置一个任务以将文件上传到您的计算机,然后重复第一步。如果您需要本地代码执行,请设置一些简单的东西,例如 Autohotkey 以将浏览器打开到远程 URL,而不是使用任务。
  • 感谢您的详细回复!我想澄清一下,我的远程机器生成了几个未修改的 html 报告文件,我可以通过以下 URL 查看主机中的任何报告:https://url_to_remote.com/path/to/index.html。我想自动化需要复制基本 URL、复制 VSCode 中的文件路径和搜索地址的过程。任何反馈表示赞赏。

标签: visual-studio-code ssh vscode-tasks


【解决方案1】:

很遗憾,在使用远程 SSH 扩展时无法在本地运行任务,尽管看起来需求已经足够并且已添加到他们的待办事项中:

https://github.com/microsoft/vscode-remote-release/issues/168

但是,如果您决心拥有这个,那么一个非常老套的方法是:

  1. 在本地机器上的 localhostIP 上设置一个基本的网络服务器

  2. 公开一个端点,该端点读取名为 file (http://localhostIP:3000/?file=blah.html) 的 URL 参数,并在 Firefox/您选择的浏览器中打开一个新选项卡,如下所示:

    firefox --new-tab https://remotehostIP:3000/blah.html
    

    这是一个单行网络服务器,可通过本地终端从 bash 运行(ctrl+shift+P,集成搜索以在连接到远程主机时启动本地终端)。此 Web 服务器完成此处提到的步骤 1 和 2(ctrl+c 停止 Web 服务器):

    echo "const http = require('http');const {exec} = require('child_process');http.createServer(function (req, res) {h='http://remotehostIP:3000/';exec(\`firefox --new-tab \${h+req.url.slice('/?file='.length)}\`);res.end();}).listen(3000);" | node
    

    缩进,代码更易阅读:

    const http = require('http');
    const {exec} = require('child_process');
    
    http.createServer(function (req, res) {
        h="http://remotehostIP:3000/";
        exec(`firefox --new-tab ${h+req.url.slice("/?file=".length)}`);
        res.end();
    }).listen(3000);
    
  3. 最后,创建一个卷曲并点击该 localhostIP 网络服务器并传递 ${relativeFile} 的任务。此任务在远程机器上运行,但会触发 localhostIP 的网络服务器打开 Firefox。这就是它的样子

     "tasks": [
         {
             "label": "show current html file",
             "type": "shell",
             "command": "curl",
             "args": ["http://localhostIP:3000/?file=${relativeFile}"],           
             "group": {
                 "kind": "build",
                 "isDefault": true
             }
         }
     ]
    

我认为目前这与您在不投入大量时间的情况下通过尽力而为的解决方案获得的效果差不多。如果您遇到任何问题,请告诉我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多