每次打开远程工作空间时,集成 shell 变回 bash

Integrated shell changes back to bash every time I open remote workspace

我尝试将 ZSH 配置为用于集成终端的默认 shell。但是,即使在连接到远程工作区(在 linux 机器上)时将 ZSH 设置为默认配置文件,每次都会打开 bash。

这是我的本地设置配置 (/Users/ewiener/Library/Application Support/Code/User/settings.json):

"terminal.integrated.profiles.linux": {
    "zsh (login)": {
        "path": "zsh",
        "args": [
            "-l"
        ]
    },
    "zsh": {
        "path": "/usr/local/bin/zsh",
    },
},
"terminal.integrated.defaultProfile.linux": "zsh (login)",
"terminal.integrated.defaultProfile.osx": "zsh",
"terminal.external.osxExec": "iTerm.app",
"terminal.integrated.fontFamily": "MesloLGS NF",

我的远程服务器没有在 /home/ewiener/.vscode-server/data/Machine/settings.json 中设置终端设置。

工作区设置也没有终端设置(/home/ewiener/myrepo/.vscode/settings.json)

连接到远程工作区时,如何确保 ZSH 已打开?即使我手动 select ZSH 作为 shell,如果我关闭并重新打开工作区,它将恢复为 bash。

更新答案:

我原来的答案并不总是对我有用,所以我决定让我的 .bashrc 在 VSCode 打开 shell 时将 shell 更改为 zsh ].您可以通过将以下内容添加到 .bashrc 的顶部来执行此操作:

if [[ "$TERM_PROGRAM" == "vscode" ]]; then
  # ~/.profile is run by the login shell (this is what ssh uses)
  # ~/.bashrc is run by the interactive shell (this is what vscode uses)
  # Therefore, we only need to change the shell to zsh here since
  # vscode will run ~/.bashrc for us.
  exec zsh -l
fi

原答案:

我意识到正确的终端在本地打开,问题只发生在远程工作区。这导致我修改了最终提供解决方案的 SSH 配置。

您可以修改 SSH 配置并设置要用于特定主机的终端。

  1. 使用命令面板(CMD/CTRL + SHIFT + P)打开Remote-SSH: Open SSH Configuration File..
  2. 选择您要编辑的配置文件。
  3. 更新您要更改使用的默认终端的主机SetEnv TERM=<terminal>

例如:

# /Users/username/.ssh/config

Host linux-server
 HostName 00.00.00.00
 User username
 SetEnv TERM=/usr/local/bin/zsh # <---- this will update your terminal

确保您是在本地计算机(而不是远程服务器)上编辑 .ssh/config

编辑 请注意,自 OpenSSH 7.8 起支持 SetEnv 指令(检查 sshd -V)。 Source