首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VSCode -远程SSH -无法在vscode-server目录中找到可执行的代码。

VSCode -远程SSH -无法在vscode-server目录中找到可执行的代码。
EN

Stack Overflow用户
提问于 2022-02-15 11:10:59
回答 2查看 1.2K关注 0票数 0

我正在使用VSCode和官方的远程ssh扩展。

我希望能够在ssh终端或远程窗口的vscode集成终端中编写code /path/to/file,以便在vscode遥控器中打开文件/文件夹。

我知道我可以从本地机器的终端使用code --folder-uri=vscode-remote://ssh-remote+ADDRESS/path/to/file,但是我希望能够在集成的vscode终端和任何其他已被ssh进入远程机器的终端会话中运行一个命令)

目前,如果我从远程终端运行code,它会在远程计算机上打开一个新的vscode窗口。

为了实现这个目标,过去我在远程机器上使用了以下别名:

alias code="${VSCODE_GIT_ASKPASS_NODE%/*}/bin/code"

它在默认为本地code之前在~/.vscode-server/bin/<COMMIT_ID>/bin中查找/bin/code可执行文件。

我从这个相关的堆栈溢出问题那里得到了那个化名。

然而,这似乎现在不起作用。

经过更仔细的检查,似乎在code目录中没有vscode-server可执行文件。

我怎么才能解决这个问题?

如果相关的话,这两台机器都在运行MacOS和visual代码版本f80445acd5a3dadef24aa209168452a3d97cc326

EN

回答 2

Stack Overflow用户

发布于 2022-03-01 13:35:37

我还希望能够在运行带有"remote“扩展的code时从集成终端运行VSCode。在我的例子中,"remote“是一个Linux (下面名为"aorus”),我想使用运行VSCode的笔记本电脑上的macOS (名为"mbp")。

至于你,我曾经用过VSCODE_GIT_ASKPASS_NODE的伎俩。最近,我不得不更改别名,因为code (在我的例子中是code-insiders )不再在bin/中可用。它似乎已经转移到bin/remote-cli了。正确的别名(用vscode 1.64.2测试):

代码语言:javascript
运行
复制
alias code="${VSCODE_GIT_ASKPASS_NODE%/*}/bin/remote-cli/code"

如果您还希望其他ssh会话(不只是在集成终端中)工作,您可以创建一个我称之为coder (r表示" remote ")的短脚本,这是我在remote上的~/bin ("aorus")中的一个脚本。请注意,您需要能够从远程访问本地机器(我用Tailscale实现了这一点)。脚本如下所示:

代码语言:javascript
运行
复制
#! /bin/bash

set -ex
remotehost=$(hostname)
localhost=mbp

cmd="code"

while [ $# -gt 0 ]; do
    if [ -f "$1" ]; then
        cmd+=" --file-uri \"vscode-remote://ssh-remote+$remotehost$(readlink -f "$1")\""
    elif [ -d "$1" ]; then
        cmd+=" --folder-uri \"vscode-remote://ssh-remote+$remotehost$(readlink -f "$1")\""
    else
        cmd+=" $1"
    fi
    shift
done

exec ssh $localhost -q -t -x "exec bash -l -c '$cmd'"

在我的Mac上,当运行远程连接到我的Linux盒的VSCode时,我可以在集成终端中输入它来打开远程Linux盒上的文件main.go

代码语言:javascript
运行
复制
coder main.go

我之所以必须将code包装为bash -l,是因为ssh默认运行在一个非登录的shell中,这意味着在my Mac上的~/.bashrc没有被选中,这意味着code不在路径上。错误消息如下所示:

代码语言:javascript
运行
复制
bash:1: command not found: code

另一个注意事项:有一个简短的语法文档化的这里

代码语言:javascript
运行
复制
ssh -q -t -x mbp bash -l -c "code --remote=ssh-remote+aorus main.go"

我不使用这个语法是因为这个方法无法知道您是只打开一个文件(应该在最近的VSCode远程会话中打开)还是一个文件夹(应该作为一个新的VSCode远程会话打开)。

最后,如果您使用的是VSCode内部人员,您可以创建一个符号链接,以便命令code在您的本地机器上工作(在我的例子中,在我的Mac上):

代码语言:javascript
运行
复制
sudo ln -sf /usr/local/bin/code-insiders /usr/local/bin/code
票数 1
EN

Stack Overflow用户

发布于 2022-03-02 09:28:58

正如maelvls已经解释过的那样,路径已经改变了。但是如果你在集成终端外使用它,你就会收到消息。

Command is only available in WSL or inside a Visual Studio Code terminal

为了避免这种情况,您需要在export VSCODE_IPC_HOOK_CLI中使用.bashrc。

在.bashrc中使用此脚本

代码语言:javascript
运行
复制
export VSCODE_IPC_HOOK_CLI=`ls -t /run/user/1012/vscode-ipc-* | head -n1`
alias code="~/.vscode-server/bin/*/bin/remote-cli/code"

如果要在当前visual studio中打开文件,请使用-r选项。

代码语言:javascript
运行
复制
code -r tes.txt

注意:我不能调用VSCODE_GIT_ASKPASS_NODE,所以我使用了完整的路径,它工作得很好--我不知道VSCODE_IPC_HOOK_CLI是否会在不同的位置显示,只需在集成的终端可视化演播室代码中检查一下

在远程服务器Centos 7本地macOS蒙特雷版本12.2 Visual代码版本: 1.64.2 (通用)提交: f80445acd5a3dadef24aa209168452a3d97cc326扩展:远程-ssh上进行测试

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71125451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档