pbe*_*eta 13 bash shell msys2 visual-studio-code
我试图将MSYS2 shell集成到Visual Studio Code集成终端中.这是我的用户设置:
{
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.shellArgs.windows": ["--login", "-i"]
}
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了--login将当前工作目录更改为Windows主页的问题.我希望当前目录位于我的工作区的根目录.
我的进一步尝试是我尝试添加一个标志-c 'cd ${workspaceRoot}'.然而,bash会在开始时崩溃.我可以正确得到当前目录中去除--login,但没有登录模式,所有其他的shell命令(ls,cd,等)不可用.
如何将MSYS2 shell正确集成到我的vscode中?
Ali*_*i80 47
这里的答案来自旧方法,该方法现在(2021 年 7 月)在 VSCode 中已弃用,新建议的方法是将其添加到 settings.json 中:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
},
"MSYS2": {
"path": "C:\\msys64\\usr\\bin\\bash.exe",
"args": [
"--login",
"-i"
],
"env": {
"MSYSTEM": "MINGW64",
"CHERE_INVOKING": "1"
}
}
},
Run Code Online (Sandbox Code Playgroud)
参考:integrated-terminal#_configuring-profiles
小智 24
要禁止从当前目录更改工作目录,请将CHERE_INVOKING环境变量设置为非空值:
"terminal.integrated.env.windows": {
"CHERE_INVOKING": "1"
},
Run Code Online (Sandbox Code Playgroud)
在MSYS登录脚本中,设置CHERE_INVOKING变量仅用于防止shell执行cd "${HOME}",而不是其他任何操作.
如果需要MinGW工具链,请设置MSYSTEM环境变量以选择工具链.识别的值是MSYS(默认值),MINGW32或MINGW64.
"terminal.integrated.env.windows": {
"MSYSTEM": "MINGW64",
},
Run Code Online (Sandbox Code Playgroud)
完整的,VS Code设置可能如下所示:
{
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.shellArgs.windows": [
"--login",
],
"terminal.integrated.env.windows": {
"CHERE_INVOKING": "1",
"MSYSTEM": "MINGW64",
},
}
Run Code Online (Sandbox Code Playgroud)
提供一些关于非常神秘的术语的上下文CHERE_INVOKING:chere显然是一个Cygwin命令,用于安装和管理"Command Prompt Here"文件夹上下文菜单项.虽然MSYS2从Cygwin继承了环境变量,但它实际上并不继承命令本身.
col*_*ola 10
这将正确启动MSYS2 bash shell,以便执行.bash_login:
"terminal.integrated.shell.windows": "C:\\msys64\\msys2_shell.cmd",
"terminal.integrated.shellArgs.windows": ["-defterm", "-mingw64", "-no-start", "-here"]
Run Code Online (Sandbox Code Playgroud)
原来的答案似乎在当时有效,但当我尝试在VSCode中开始使用任务时,它显然无法正常工作.尝试运行一个简单调用make all的任务会导致以下错误:
/ usr/bin/bash:/ d:没有这样的文件或目录
终端进程以退出代码终止:127
从其他答案,使用"terminal.integrated.shellArgs.windows": ["--login", "-i"]几乎正确的环境(MSYS而不是MINGW64),但在错误的目录中"terminal.integrated.shellArgs.windows": ["-lic", "cd $OLDPWD; exec bash"]启动,并在正确的目录中启动正确的环境,但无法运行任务.
我想出了迄今为止似乎工作正常的解决方案.
在VSCode设置中:
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.env.windows":
{
"MSYSTEM": "MINGW64",
//"MSYS2_PATH_TYPE": "inherit",
"MSVSCODE": "1"
},
Run Code Online (Sandbox Code Playgroud)
在.bashrc中:
if [ ! -z "$MSVSCODE" ]; then
unset MSVSCODE
source /etc/profile
cd $OLDPWD
fi
Run Code Online (Sandbox Code Playgroud)
这对我有用:
{
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.shellArgs.windows": ["--login", "-i"],
"terminal.integrated.env.windows":
{
"MSYSTEM": "MINGW64",
"CHERE_INVOKING":"1"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9544 次 |
| 最近记录: |