43

I created a new task

{Bash}

passed my home directory

/dir "C:\Users\TMB\"

and added bash as an application

C:\cygwin\bin\bash.exe

When I open Bash, it is unable to use the basic UNIX/Cygwin utilities. How do I configure ConEmu to run Cygwin Bash?

4
  • What ConEmu version you are trying? Also, not all bash versions supports working directory. Git bash - can, as I remember.
    – Maximus
    May 3, 2013 at 20:39
  • I couldn't figure out how to set me working directory in my bash profile, but I think I found a more general solution below the marked answer.
    – TMB
    May 4, 2013 at 5:44
  • ConEmu x64 120727c.x64
    – TMB
    May 4, 2013 at 5:46
  • With "working directory" I mean one you specify with /dir switch. BTW, have you read this answer? superuser.com/a/482340/139371
    – Maximus
    May 4, 2013 at 9:33

6 Answers 6

50

This might helps others.

It looks like version 140310 of ConEmu automatically detects CygWin Bash.

If you've installed Cygwin after you installed ConEmu, you'll need to Reload... your list of Tasks.

  1. Go to Settings... (Win + Alt + P)
  2. Navigate to your list of Tasks (Startup > Tasks)
  3. Click on the Reload... button.

You should now see {CygWin bash} as one of your options in the list of predefined tasks:

Screenshot of CygWin bash in ConEmu

PS -- If this method doesn't work, try resetting your ConEmu settings (click the Reset... button at the bottom of your Settings window).

6
  • 2
    And if Reloading and Resetting don't work, I guess we could enter the path, command, and options as shown in your screen shot.
    – TMB
    Mar 29, 2014 at 2:16
  • %SystemDrive%\cygwin64\bin\sh.exe --login -i for me on 140304 on the Preview Channel.
    – TMB
    Mar 29, 2014 at 2:22
  • 3
    For me clicking the Add default tasks... button (right above the Reload button) did the trick...
    – Hanan
    Jun 26, 2014 at 19:17
  • 9
    Note that sh.exe won't source your .bashrc; only bash.exe will do that. So I'm using the command %SystemDrive%\cygwin64\bin\bash.exe --login -i
    – John Prior
    Sep 15, 2014 at 15:32
  • @JohnPrior's comment is actually very helpful. The PATH variable was all wrong when using sh.exe, but with bash.exe it can now actually find my applications.
    – flungo
    Nov 5, 2014 at 19:06
7

or instead of

C:\cygwin\bin\bash.exe

use

C:\cygwin\Cygwin.bat
1
  • I think that's indeed the simplest way.
    – laurent
    Dec 27, 2013 at 16:35
6

Ensure that Bash is receiving a sensible value for $PATH; usually it inherits that from whatever calls it, but ConEmu is a Windows application, so all it's going to provide is whatever you have set for %Path%. Generally that doesn't include the Cygwin path directories, so Bash doesn't know where to look for ls, &c.

The way I'd solve this would be to, via whatever means ConEmu offers for doing so, pass --login -i as command line arguments to Bash; this will tell it you're running it as an interactive login shell, so it will read /etc/profile, ~/.profile, and ~/.bashrc on start. In my experience, that's been enough to give it a sensible $PATH; if that doesn't work for you, you could specify it explicitly with a line like PATH=/bin:/usr/bin:/usr/local/bin:[...]:$PATH in your ~/.bashrc.

2
  • This got me the utilities I was looking for next I wanted to point to my normal windows home directory not /cygdrive/c/cygwin/home so I deleted home and made a junction with mklink -J home C:\Users in cmd.exe
    – TMB
    May 4, 2013 at 5:43
  • 3
    Glad it did the job for you. I never thought about using a junction to point ~ at c:\users\me, but I once did it with a symlink, and from that experience I give you the following warning: if you ever need to run ComboFix to clean up a malware infestation on your machine, it will blow away any files in c:\users\you. I lost everything in my home directory that way once, and my newest backup was a week old. Don't make the same mistake I did! May 4, 2013 at 6:48
2

This is my way

Create a new task in ConEmu with following command

set HOME=C:\Home & "C:\Home\Applications\cygwin64\bin\mintty.exe" -i /Cygwin-Terminal.ico -
1
  • Your solution works, and I like having the mintty.exe interface, but can you explain why this works? Especially, what is the "&" doing here? Dec 23, 2016 at 9:16
0

I know thats a pretty old question but I wanted to share this anyway:

To start the bash within a specific working directory just set the command for example to SET CHERE_INVOKING=1 & "C:\cygwin\bin\bash.exe --login -i" -cur_console:t:"cygwin terminal" and specify the working directory normally via /dir "..." as described here.

0

To make Cygwin commands available from bash, regardless of how you run it, as well as from cmd or any other shell, make sure your Path environment variable has Cygwin's bin directory added.
Go to Control Panel > System and Security > System (standard hotkey Win+Pause), then Advanced system settings > Environment variables. For all users, edit the system Path variable, just for your user - edit (create if it doesn't exist) the user Path variable.
Assuming cygwin is installed at C:\cygwin (might be cygwin64 for 64-bit Cygwin), add C:\cygwin\bin to the Path. Be aware that if you use the system Path variable, if you add Cygwin's bin in the beginning, some Cygwin's command will shadow built-in ones (e.g. Cygwin's find will be used instead of Windows' find). I prefer to do so, but if you don't, add Cygwin's bin at the end of your Path.

Since most other answers also talk about ConEmu setup, I'll give my personal opinion as well.

I prefer to run a non-login shell. For example, in Linux you get a login shell when you log in at the text console or via ssh, and a non-login interactive shell when you open a terminal emulator (xterm, konsole, etc.).

My {Bash} task has /dir "%CD%" task parameters to set the working directory to the current tab's working directory (e.g. if the bash task from Far). The command to start bash:
%ConEmuDrive%\cygwin\bin\bash.exe -new_console:C:"%ConEmuDrive%\cygwin\Cygwin.ico"

Notice --login -i options are omitted, shell will start as a non-login interactive shell (since it has no non-option arguments and without the -c option, and it's stdin and stdout are connected to terminals, refer to INVOCATION section of bash's manpage for more explanation). It will read and execute commands from the user rcfile ~/.bashrc (not /etc/profile or ~/.bash_profile as a login shell would, thus you don't need to set CHERE_INVOKING=1 which is only relevant with regards to /etc/profile). So put your user aliases, shell options, extra environment variables etc. to ~/.bashrc, where they rightfully belong.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .