我想创建一个 2x2 的控制台网格,我希望它是我的默认设置,这意味着当我打开 ConEmu 时,这个设置是启动设置。我写了一个如下的任务:
>* cmd -cur_console:n
*powershell -cur_console:s1TVn
cmd /A /Q /K "C:\dev\msys64\msys2_shell.bat" -cur_console:s1THn
ghci.exe -cur_console:s2THn
问题出在最后一个命令上。我想开始msys2
,但是当我运行我的任务时,对于第三行,我得到一个控制台,但它不在 ConEmu 内运行,而是将其作为单独的窗口打开。如何修复此配置?
另外,如何在启动 ConEmu 时将此配置设置为默认配置,而现在启动它时,我只能得到一个 cmd 控制台。
jst*_*ine 20
要做的事情其实很简单,一旦你把所有的层都剥掉。这可以很好地用作调用(确保将其修改为您的特定 MSYS2 安装位置):
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & "c:\msys64\usr\bin\bash.exe" --login -i
Run Code Online (Sandbox Code Playgroud)
我个人建议将 shell 设置为继承您的 PATH:
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & set MSYS2_PATH_TYPE=inherit & "c:\msys64\usr\bin\bash.exe" --login -i
Run Code Online (Sandbox Code Playgroud)
MSYS2喜欢根据环境变量而不是命令行参数来配置shell。以这种方式将选项传递给程序一开始可能看起来不自然,但基本上它只是遵循这个简单的系列:set VAR=value & set VAR2=value & "c:\path\to\command" [args]
CHERE_INVOKING
- 如果设置为 1,则 bash 在当前工作目录中启动,否则在用户的主目录中启动。这需要设置为1
允许外壳程序按预期从资源管理器窗口上下文菜单中工作。
MSYSTEM
- 要使用哪个 MSYS2 子系统。共有三种:MSYS、MINGW32 和 MINGW64。该MSYS
子系统应该只用于pacman
命令操作,所以我通常只在非常罕见的情况下通过 old-skool 开始菜单图标调用它。 MINGW32
对少数几个用户来说是无用的,你可能已经知道你是谁了。
MSYS2_PATH_TYPE
-如果取消设置MSYS使用最小的PATH
仅包含MSYS二进制环境和一对夫妇选择Windows系统路径,是一个需要模式的MSYSTEM=MSYS
外壳只。对于MINGW
外壳,建议使用inherit
- 我多年来一直使用MSYS2_PATH_TYPE=inherit
没有问题。
MSYSCON
另一个答案提到了另一个变量,并在msys2_shell.cmd
- 忽略它中引用。它仅用于msys2_shell.cmd
批处理文件中,与 bash.exe 或 MSYS shell 初始化的行为无关。
MSYS2 路径是故意硬编码的,c:\msys64\
因为这是 MSYS2 Windows 安装程序的默认安装位置。在这种情况下使用没有意义,%ConEmuDir%
因为它是相对于 的%PROGRAMFILES%
,而 MSYS2 更通常是相对于硬盘驱动器的根目录安装的。请注意,在引用Git for Windows附带的 MSYS2 shell 时使用它确实有意义,因为它是相对于.%ConEmuDir%
%PROGRAMFILES%
没有简单的方法可以知道 MSYS2 的安装位置。MSYS2 也没有设置环境变量,正如我希望的那样。如果 MSYS2 有一个选项可以将某些东西导出MSYSTEM_HOME
到您的机器环境中,那不是很好吗?但事实并非如此,因此作为用户,您完全可以知道它的安装位置并将 ConEmu 指向那里。
msys2_shell.cmd
:不要使用它。批处理文件的名称不正确。它应该被调用msys2_terminal.cmd
或类似,因为它实际上在做的是为 shell 设置整个终端。这是一个常见的术语错误,尤其是在 Windows 操作系统上,终端与shell从未真正明确分离。这是它的工作原理,从 Windows 用户的角度解释:
Shell - 这是命令处理器和批处理/脚本运行程序。它本质上是一个命令行应用程序,很像任何其他命令行应用程序。外壳甚至不需要任何可见的窗口或键盘连接。它可以完全在后台对文件、流或其他数据输入/输出源进行操作。
终端——这是一个窗口应用程序,它为shell 程序提供键盘/鼠标界面。在 Windows 中,它通常被称为Console Window。键盘命令通过管道传送到 shell 程序,输出显示在带有滚动条、彩色文本和其他有趣功能的窗口内。
在这种情况下,我希望我的终端是ConEmu并且我的 shell 是BASH (mingw64)。因此,我希望ConEmu启动 shell 并且只启动 shell。我不希望ConEmu开始mintty。这些都是终端,这会导致我们获得二级弹出窗口——一个用于 ConEmu,另一个用于 mintty。但这正是试图跑步msys2_shell.cmd
会做的事情。所以不要使用它。
小智 18
我在让 MSYS2、MinGW32 和 MinGW64 shell (v2016-12-07) 在 ConEmu v161206 中工作时也遇到了问题。
我发现的唯一(半便携式)工作解决方案如下。
{Shells::mingw-64}
在 ConEmu 中为 MinGW64 shell使用名称和以下命令创建一个新任务:
set MSYSTEM=MINGW64 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
Run Code Online (Sandbox Code Playgroud){Shells::mingw-32}
在 ConEmu 中为 MinGW32 shell使用名称和以下命令创建一个新任务:
set MSYSTEM=MINGW32 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
Run Code Online (Sandbox Code Playgroud){Shells::msys2-64}
在 ConEmu 中为 MSYS2 shell使用名称和以下命令创建一个新任务:
set MSYSTEM=MSYS & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
Run Code Online (Sandbox Code Playgroud)注意:修改上面的相对路径以匹配系统上 MSYS2 的路径。
该解决方案是半便携的,因为它明确说明了 ConEmu 可执行文件(将其更改ConEmu.exe
为 x86)。
我不确定MSYSCON
环境变量的值是否重要。我只是为了安全才设置它,因为 MSYS2 批处理文件msys2_shell.cmd
也设置了它。
另一种方法是使用msys2_shell.cmd
批处理脚本。这种方法有一个巨大的缺点,即msys2_shell.cmd
通过 WindowsSTART
命令生成一个新进程,因此在 ConEmu 中添加了两个选项卡。
{Shells::mingw-64}
在 ConEmu 中为 MinGW64 shell使用名称和以下命令创建一个新任务:
"%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw64 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
Run Code Online (Sandbox Code Playgroud){Shells::mingw-32}
在 ConEmu 中为 MinGW32 shell使用名称和以下命令创建一个新任务:
"%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw32 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
Run Code Online (Sandbox Code Playgroud){Shells::msys2-64}
在 ConEmu 中为 MSYS2 shell使用名称和以下命令创建一个新任务:
"%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -msys -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
Run Code Online (Sandbox Code Playgroud)在msys2_shell.cmd
旨在被从直接使用CMD.EXE
,与ConEmu64.exe
/ConEmu.exe
在PATH
:
msys2_shell -mingw64 -conemu
Run Code Online (Sandbox Code Playgroud)
该命令在 ConEmu 中打开一个新的 MinGW64 选项卡。
tl;dr:我推荐第一种方法。这是 ConEmu 中的一个截图作为证明:
往里面看msys2_shell.bat
就能得到答案。该批次运行 mintty 而不是 bash shell。无用。将第三行更改为完整路径bash.exe -l -i
。
如何在启动 ConEmu 时将此配置设置为默认配置
ConEmu 中有“启动”设置页面,不是吗?
归档时间: |
|
查看次数: |
9845 次 |
最近记录: |