如何从Visual Studio Code集成终端在Windows上使用Bash?

How do I use Bash on Windows from the Visual Studio Code integrated terminal?

Windows上的Visual Studio Code默认使用PowerShell作为集成终端。 如果要使用Visual Studio Code中的Bash,应遵循哪些步骤?


You no longer need to type in bash.exe path manually. This answer is deprecated. Now you can switch to bash directly. Just make sure you have git installed.

从https://git-scm.com/download/win安装Git。

然后打开Visual Studio代码,并使用Ctrl + Shift + P打开命令选项板。然后键入"打开用户设置",然后从下拉菜单中选择"打开用户设置"。

Visual Studio Code command palate

然后,该选项卡将打开,左侧为默认设置,右侧为您的设置:

enter image description here

现在,将这行代码复制到您自己的设置页面(右侧窗格)中,然后保存-
"terminal.integrated.shell.windows":"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"

注意:"C:\\\\Program Files\\Git\\bin\\bash.exe"是Git安装中bash.exe文件所在的路径。如果您使用的是Windows Subsystem for Linux(WSL)Bash Shell,则路径为"C:\\Windows\\System32\\bash.exe"

现在按Ctrl + `从Visual Studio Code打开终端。而且您将拥有Bash-

Enter image description here


  • 从https://git-scm.com/download/win安装Git

  • 打开Visual Studio Code,然后按住Ctrl + `打开终端。

    Enter image description here

  • 使用Ctrl + Shift + P打开命令面板。

  • 类型-选择默认外壳

  • 从选项中选择Git Bash

  • 单击终端窗口中的+图标

  • 现在,新终端将是Git Bash终端。花费几秒钟来加载Git Bash

    Enter image description here

  • 现在,您也可以从终端中的下拉菜单在不同终端之间切换。

    Enter image description here


  • 已更新:较新版本的Visual Studio Code在终端下拉菜单中具有"选择默认Shell"命令:

    Select Default Shell option

    请记住,它只是列出%PATH%环境变量中的shell。对于不在您的路径中的外壳,请参见其他答案。

    特别提示:启动bash时,它将仅执行.bashrc,如果.bash_profile中具有初始化命令,则必须将其复制到.bashrc。这对于在Git Bash中使用Conda环境至关重要。

    在1.36版之前(2019年6月)

    现在最简单的方法(至少从Visual Studio Code 1.22开始)是键入Shift + Ctrl + P打开命令面板,然后键入:

    1
    Select Default Shell

    现在,您可以在路径中找到的外壳之间轻松选择首选外壳:

    Shell selection list

    对于不在您的%PATH%中的shell,请参见其他答案。

    请参阅完整的Visual Studio Code Shell参考。有很多肉的东西。


    按住Ctrl + `打开终端。
    在终端内部,键入bash以在终端中使用Git Bash。
    注意:确保在计算机上安装了Git Bash。

    如果希望再次使用PowerShell,只需在终端中键入powershell。要使用Windows命令行,请在终端中键入cmd

    您选择的设置将用作默认设置。


    对我来说,以下是唯一可行的组合!

    1
    2
    3
    4
    5
    6
    "terminal.integrated.shell.windows":"C:\\\\Program Files\\\\Git\\\\git-cmd.exe",
    "terminal.integrated.shellArgs.windows": [
     "--command=usr/bin/bash.exe",
     "-l",
     "-i"
    ]

    使用git-bash.exe作为...shell.windows,每次Bash在Visual Studio外部打开时!!


    由于Visual Studio Code的最新更新,事情有所改变。以下步骤对我有用。

  • Ctrl + Shift + P打开Visual Studio代码命令面板。

  • 在文本区域中键入>preferences: Open Settings (JSON)

  • 在您的JSON文件的末尾添加以下行
    右窗格。

    1
    "terminal.integrated.shell.windows":"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"
  • 关闭并重新打开Visual Studio Code实例。


  • 我遵循Paul DeCarlo的本教程,使用Linux的Windows子系统(WSL)中的Bash,而不是Windows的Git Bash随附的Bash。它们与答案中的步骤相同,但请在"用户设置"中使用以下步骤。

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

    这是第一次为我工作...这在这方面是罕见的。


    至少对我而言,这将使Visual Studio Code作为外部终端打开一个新的Bash窗口。

    如果需要集成环境,则需要指向Git安装的bin文件夹内的sh.exe文件。

    因此配置应显示C:\\\\\\\\bin\\\\sh.exe


    该答案与投票最多的答案相似,但有一个重要区别:该问题的许多先前答案都集中在运行Git Bash上,而我的答案集中于运行WSL Bash。

  • 在Windows 10计算机上为Linux启用Windows子系统。

  • 打开Visual Studio Code,然后按住Ctrl +`打开终端。

  • 使用Ctrl + Shift + P打开命令面板。

  • 键入-Select Default Shell

  • 从选项中选择WSL Bash(不是Git Bash)。

  • enter image description here

  • 单击终端窗口中的+图标。现在,新终端将是WSL Bash终端!

  • 这取决于您是否仅在当前用户或所有用户中安装了Git Bash:

    如果所有用户都安装了它,则在用户设置(Ctrl + Comma)中放入"terminal.integrated.shell.windows":"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"

    如果仅当前用户安装了它,则在用户设置(Ctrl + Comma)中放入"terminal.integrated.shell.windows":"C:\\\\Users\\\\\\\\AppData\\\\Local\\\\Programs\\\\Git\\\\bin\\\\bash.exe"

    如果上面列出的方法不起作用,那么您应该尝试Christer的解决方案,该解决方案显示-

    If you want the integrated environment you need to point to the sh.exe file inside the bin folder of your Git installation.

    So the configuration should say C:\\\\\\\\bin\\\\sh.exe.

    注意:sh.exe和bash.exe对我来说似乎完全相同。它们之间应该没有区别。


    我已经在WSL(Windows上的Ubuntu上的Bash)上设置了许多conda环境,所以我想在Visual Studio Code上使用相同的Bash安装。

    为此,我只需要在Visual Studio Code的设置中指定此特定Bash可执行文件的路径(而不是Git-Bash):

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

    PS:确保Windows计算机上的Ubuntu on Bash可执行文件安装在何处,打开Command prompt(搜索:cmd)并运行:

    where bash.exe


    最新的VS代码:

    • 如果看不到settings.json,请转到菜单文件->首选项->设置(或按Ctrl+,)
    • 出现设置,请参见两个选项卡用户(默认情况下选中)和工作区。转到用户->功能->终端
    • 出现终端部分,请参见链接edit in settings.json。单击并添加"terminal.integrated.shell.windows":"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe",
    • 保存并重新启动VS代码。

    Bash终端将反映在终端上。


    Git\\bin目录添加到Path环境变量。该目录默认为%ProgramFiles%\\Git\\bin。这样,您只需在每个终端(包括Visual Studio Code的集成终端)中键入bash即可访问Git Bash。

    如何在Windows中设置路径和环境变量


    我从vscode 1.42.1开始尝试了上述答案,但它们的工作原理是让我得到了git bash终端。因此,此设置的底线仅适用于从终端打开bash shell:

    1
    "terminal.integrated.shell.windows":"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"

    但是,它也具有用作外壳的缺点,并破坏了MS C ++链,因为bash将用于路径分隔符的\\字符理解为转义字符。然后,对我而言,完整的修复程序要求我添加此额外变量,并将其设置为powershell:

    1
    "terminal.integrated.automationShell.windows":"C:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe"

    现在,我可以使用bash终端了,并且Ctrl-Shift-BF5可以正常工作。

    哦,正如其他张贴者所说,此信息的来源是VSCode的文档。


    我碰巧正在为一家财富500强公司提供咨询服务,可悲的是Windows 7并且没有管理员权限。因此,Node.js,Npm,Visual Studio Code等被推到了我的机器上-我不能做很多改变,等等。

    对于运行Windows 7的计算机:

    以下是我的新设置。一个不起作用的被注释掉。

    1
    2
    3
    4
    5
    {
       "update.channel":"none",
       "terminal.integrated.shell.windows":"C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"
        //"terminal.integrated.shell.windows":"C:\\\\Windows\\\\sysnative\\\\bash.exe"
    }

    如果您已经具有" bash"," powershell"和" cmd" CLI,并且具有正确的路径设置,则可以通过以下方式从一个CLI切换到另一个CLI。

    Ctrl + ' : Opens the terminal window with default CLI.

    bash + enter : Switch from your default/current CLI to bash CLI.

    powershell + enter : Switch from your default/current CLI to powershell CLI.

    cmd + enter : Switch from your default/current CLI to cmd CLI.

    我正在使用的VS代码版本是1.45.0


    分离的或不相关的外壳和code [args]支持如何?

    尽管其他答案都讨论了如何配置和使用VScode集成的WSL bash终端支持,但它们并不能解决"分离的外壳"的问题:不是从VScode内部启动的外壳,或者是从VScode中"断开连接"的外壳 与IDE关联的VScode服务器实例。

    这样的shell会产生如下错误:

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

    要么...

    Unable to connect to VS Code server.
    Error in request

    这是一个可以轻松解决此问题的脚本。

    我每天都使用此方法将tmux会话中的shell与特定的VScode服务器实例连接,或修复与其托管IDE分离的集成shell。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #!/bin/bash
    # codesrv-connect
    #
    #  Purpose:
    #     Copies the vscode connection environment from one shell to another, so that you can use the
    #     vscode integrated terminal's"code [args]" command to communicate with that instance of vscode
    #     from an unrelated shell.
    #
    #  Usage:
    #    1.  Open an integrated terminal in vscode, and run codesrv-connect
    #    2.  In the target shell, cd to the same directory and run
    #      ". .codesrv-connect", or follow the instruction printed by codesrv-connect.
    #
    #  Setup:
    #    Put"codesrv-connect somewhere on your PATH (e.g. ~/bin)"
    #
    #  Cleanup:
    #    - Delete abandoned .codesrv-connect files when their vscode sessions die.
    #    - Do not add .codesrv-connect files to git repositories.
    #
    #  Notes:
    #     The VSCODE_IPC_HOOK_CLI environment variable points to a socket which is rather volatile, while the long path for the 'code' alias is more stable: vscode doesn't change the latter even across a"code -r ." reload.  But the former is easily detached and so you need a fresh value if that happens.  This is what codesrv-connect does: it captures the value of these two and writes them to .codesrv-connect in the current dir.
    #
    #   Verinfo: v1.0.0 - [email protected] - 2020-03-31
    #

    function errExit {
        echo"ERROR: $@">&2
        exit 1
    }

    [[ -S $VSCODE_IPC_HOOK_CLI ]] || errExit"VSCODE_IPC_HOOK_CLI not defined or not a pipe [$VSCODE_IPC_HOOK_CLI]"
    if [[ $(which code) != *vscode-server* ]]; then
        errExit"The 'code' command doesn't refer to something under .vscode-server: $(type -a code)"
    fi
    cat <<EOF >.codesrv-connect
    # Temp file created by $(which codesrv-connect): source this into your working shell like '. .codesrv-connect'
    # ( git hint: add".codesrv-connect" to .gitignore )
    #
    cd"$PWD"
    if ! test -S"$VSCODE_IPC_HOOK_CLI"; then
        echo"ERROR: $VSCODE_IPC_HOOK_CLI not a socket. Dead session."
    else
        export VSCODE_IPC_HOOK_CLI="$VSCODE_IPC_HOOK_CLI"
        alias code=$(which code)
        echo"Done: the 'code' command will talk to socket \"$VSCODE_IPC_HOOK_CLI\" now."
        echo"You can delete .codesrv-connect when the vscode server context dies, or reuse it in other shells until then."
    fi
    EOF

    echo"# OK: run this to connect to vscode server in a destination shell:"
    echo". $PWD/.codesrv-connect"