如何配置ConEmu以运行Cygwin Bash?


42

我创建了一个新任务

{重击}

通过我的主目录

/ dir“ C:\ Users \ TMB \”

并添加了bash作为应用程序

C:\ cygwin \ bin \ bash.exe

当我打开Bash时,它无法使用基本的UNIX / Cygwin实用程序。如何配置ConEmu以运行Cygwin Bash?


您正在尝试哪个ConEmu版本?另外,并非所有bash版本都支持工作目录。Git bash-我记得可以。
Maximus

我不知道如何在我的bash个人资料中设置工作目录,但是我认为我在标记的答案下方找到了一个更通用的解决方案。
TMB

ConEmu x64 120727c.x64
TMB

“工作目录”是指您使用/ dir开关指定的目录。顺便说一句,你读过这个答案吗?superuser.com/a/482340/139371
Maximus

Answers:


48

这可能会帮助其他人。

看起来ConEmu的140310版本会自动检测到CygWin Bash。

如果在安装ConEmu后安装了Cygwin,则需要重新加载...任务列表。

  1. 转到设置...(Win + Alt + P)
  2. 导航到您的任务列表(“启动”>“任务”)
  3. 单击重新加载...按钮。

现在,您应该在预定义任务列表中看到{CygWin bash}作为您的选项之一:

ConEmu中CygWin bash的屏幕截图

PS-如果此方法不起作用,请尝试重置ConEmu设置(单击“ 设置”窗口底部的重置...”按钮)。


2
而且,如果重新加载重置不起作用,我想我们可以输入屏幕快照中所示的路径,命令和选项。
TMB 2014年

%SystemDrive%\cygwin64\bin\sh.exe --login -i在预览频道上以140304为我
TMB 2014年

3
对于我来说,单击Add default tasks...按钮(在按钮上方Reload)确实可以解决问题……
Hanan N.14年

9
请注意,sh.exe不会获取您的.bashrc。只有bash.exe会这样做。所以我正在使用命令%SystemDrive%\cygwin64\bin\bash.exe --login -i
John Prior

@JohnPrior的评论实际上非常有帮助。使用sh.exe时,PATH变量全错了,但是使用bash.exe,它现在可以实际找到我的应用程序了。
flungo 2014年

7

或代替

C:\cygwin\bin\bash.exe

采用

C:\cygwin\Cygwin.bat

我认为这确实是最简单的方法。
laurent

6

确保Bash收到合理的价值$PATH;通常,它会从调用它的任何对象继承它,但是ConEmu是Windows应用程序,因此它将提供的只是您设置的内容%Path%。通常,该目录不包含Cygwin路径目录,因此Bash不知道在何处查找ls&c。

我要解决的方法是通过ConEmu提供的任何方式将--login -i命令行参数作为参数传递给Bash。这将告诉它你运行它作为一个交互式登录shell,所以它会读/etc/profile~/.profile~/.bashrc上启动。以我的经验,这足以使它变得明智$PATH;如果不适合你,你可以用一条线,如明确指定它PATH=/bin:/usr/bin:/usr/local/bin:[...]:$PATH在你的~/.bashrc


这给了我接下来要寻找的实用程序,我不想指向常规的Windows主目录,/cygdrive/c/cygwin/home所以我删除homemklink -J home C:\Userscmd.exe 并与cmd.exe 建立了连接
TMB

3
很高兴为您完成了工作。我从没想过使用结点将〜指向c:\ users \ me,但是我曾经使用符号链接进行过此操作,根据这种经验,我会向您发出以下警告:如果您需要运行ComboFix来清理恶意软件在您的计算机上进行大批入侵,它将删除c:\ users \ you中的所有文件。我曾经以这种方式丢失了主目录中的所有内容,而我的最新备份只有一个星期大。不要犯同样的错误!
亚伦·米勒

2

这是我的方式

使用以下命令在ConEmu中创建新任务

set HOME=C:\Home & "C:\Home\Applications\cygwin64\bin\mintty.exe" -i /Cygwin-Terminal.ico -

您的解决方案有效,并且我喜欢拥有mintty.exe界面,但是您能否解释一下为什么有效?特别是,“&”在这里做什么?
库特希尔·阿特奇博士(Dr. Koutheir Attouchi)

0

我知道这是一个非常老的问题,但是我还是想分享一下:

要在特定的工作目录中启动bash,只需将命令设置为,SET CHERE_INVOKING=1 & "C:\cygwin\bin\bash.exe --login -i" -cur_console:t:"cygwin terminal"然后/dir "..."此处所述通过通常指定工作目录。


0

要使Cygwin命令可以从中获得bash,无论您如何运行,以及从cmd或从任何其他Shell中获得,请确保您的Path环境变量已bin添加Cygwin的目录。
转到Control Panel > System and Security > System(标准热键Win+Pause),然后Advanced system settings > Environment variables。对于所有用户,Path仅针对您的用户编辑系统变量-编辑(如果不存在则创建)用户Path变量。
假设cygwin已安装C:\cygwin(对于64位Cygwin,可能是cygwin64),请添加C:\cygwin\bin到中Path。请注意,如果使用系统Path变量,则bin在开始时添加Cygwin的命令,某些Cygwin的命令将使内置命令无效(例如,find将使用Cygwin的命令而不是Windows的命令)find)。我更喜欢这样做,但如果您不这样做,请bin在末尾添加Cygwin Path

由于大多数其他答案也都谈到了ConEmu的设置,因此我也会给出我的个人意见。

我更喜欢运行非登录外壳。例如,在Linux中,当您在文本控制台或通过ssh登录时,将获得一个登录shell,而在打开终端仿真器(xterm,konsole等)时,将获得一个非登录交互式shell。

我的{Bash}任务具有/dir "%CD%"任务参数,用于将工作目录设置为当前选项卡的工作目录(例如,如果来自Far的bash任务)。启动bash的命令:
%ConEmuDrive%\cygwin\bin\bash.exe -new_console:C:"%ConEmuDrive%\cygwin\Cygwin.ico"

注意--login -i,省略了选项,shell将作为非登录交互shell启动(因为它没有非选项参数并且没有-c选项,并且它的stdin和stdout连接到终端,请参见bash联机帮助页的INVOCATION部分以获取更多信息。说明)。它将从用户rcfile读取并执行命令~/.bashrc(不是/etc/profile~/.bash_profile不像登录shell那样,因此您不需要与set CHERE_INVOKING=1仅仅相关的/etc/profile)。因此,将您的用户别名,shell选项,额外的环境变量等放入〜/ .bashrc中,它们理应属于此名称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.