【问题标题】:VSCode - remote SSH - can't find code executable in vscode-server directoryVSCode - 远程 SSH - 在 vscode-server 目录中找不到可执行代码
【发布时间】:2022-03-02 17:28:58
【问题描述】:

我正在使用 VSCode 和官方 remote-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"

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

我从 this related stackoverflow question 那里得到了这个别名。

但是,现在这似乎不起作用。

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

我该如何解决这个问题?

两台机器都运行 MacOS 和 Visual Studio 代码版本 f80445acd5a3dadef24aa209168452a3d97cc326,如果相关的话。

【问题讨论】:

    标签: visual-studio-code ssh remote-access


    【解决方案1】:

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

    至于你,我曾经使用VSCODE_GIT_ASKPASS_NODE 技巧。最近,我不得不更改别名,因为 code(或在我的情况下为 code-insiders)在 bin/ 中不再可用。它似乎已移至bin/remote-cli。正确的别名(用 vscode 1.64.2 测试):

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

    如果您还希望它在其他 ssh 会话中工作(不仅仅是在集成终端内),您可以创建一个简短的脚本,我称之为 coderr 表示“远程”),我在 @987654331 中拥有@ 在我的遥控器上(“aorus”)。请注意,您需要能够从远程访问本地计算机(我使用 Tailscale 进行此操作)。脚本如下所示:

    #! /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

    coder main.go
    

    我必须将code 包装在bash -l 中的原因是ssh 默认情况下在非登录shell 中运行,这意味着我的Mac 上的~/.bashrc 不是捡起,这意味着code 不在PATH 中。错误信息如下所示:

    bash:1: command not found: code
    

    另一个注意事项:here 记录了更短的语法:

    ssh -q -t -x mbp bash -l -c "code --remote=ssh-remote+aorus main.go"
    

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

    最后,如果您使用 VSCode Insiders,您可以创建一个符号链接,以便命令 code 在您的本地计算机上运行(在我的情况下,在我的 Mac 上):

    sudo ln -sf /usr/local/bin/code-insiders /usr/local/bin/code
    

    【讨论】:

    • 我怎样才能使你的coder 脚本适应 macOS 主机?我收到此错误:readlink: illegal option -- fusage: readlink [-n] [file ...]
    • 啊,对,readlink -f 仅适用于 GNU coreutils 附带的 readlink。我会想办法的。
    • 我最终使用 brew install coreutils 在 macOS 主机上安装 coreutils,然后将 readlink 替换为 greadlink 并且一切正常。但是,我仍然不知道为什么我不能找出一个可以与 code 命令一起使用的解决方案......因为它以前有效,我不确定是什么阻止了它现在工作。跨度>
    • 我刚刚发现 macOS 的 readlink 与 GNU 的 readlink -f 完全相同。关于集成终端中的code,它应该仍然可以工作,无需使用上面的coder 脚本。在集成终端中,如果您运行 echo $PATH | tr -s : $'\n' | grep vscode,您将看到另一个特定于远程会话的 code。它的路径是这样的:~/.vscode-server/bin/<somehash>/bin/remote-cli/code 不幸的是,这种方法在集成终端之外不起作用,这就是我使用上面的coder 脚本的原因。
    • 有趣...因为我以前也有一个在集成终端之外工作的解决方案...要是我有一台时光机就好了!
    【解决方案2】:

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

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

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

    在你的 .bashrc 中使用这个脚本

    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 选项。

    code -r tes.txt
    

    注意: 我不能打电话给VSCODE_GIT_ASKPASS_NODE 所以我使用完整路径,它运行良好 我不知道VSCODE_IPC_HOOK_CLI 是否会显示在不同的位置,只需在您的集成终端Visual Studio 代码中查看即可

    在远程服务器 Centos 7 上测试 本地 macOS Monterey 版本 12.2 Visual Studio 代码版本:1.64.2(通用) 提交:f80445acd5a3dadef24aa209168452a3d97cc326 扩展名:remote-ssh

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2020-01-06
      • 2023-01-25
      • 2019-05-24
      相关资源
      最近更新 更多