win-bash - A stand-alone bash for Windows

win-bash is a Windows port of the famous GNU bash (see GNU Bash homepage).

Unlike other bash ports for Windows (e.g. the cygwin bash ), the win-bash needs no special environment or DLLs. There is just one binary and that's it.

win-bash is based on nt_bash which was an early bash port for Windows NT started by Mountain Math Software some years ago. As far as I know, the nt_bash port project stopped in alpha status and has never been finished.

The goal of the win-bash project is to finish the port to Windows and provide a fully-functional bash.exe binary for Windows NT and derived systems. win-bash can be used as an input shell, as well as an interpreter to run UN*X shell scripts.

Please report bugs to the sourceforge bug tracking system.

  • What differs win-bash from cygwin-bash?

    First of all, you should keep in mind that win-bash is based on a old version of bash (1.14.2) while cygwin -bash is more or less up to date.

    One important difference is the handling of drives: cygwin uses its installation directory as root dir and links all drives in the pseudo subdir /cygdrive . win-bash uses a diffent method: drives are included in paths, like on windows (e.g. c:/Winnt/System32 ). The root directory / is mapped to the root directory of the current drive.

    • ls c:/winnt - shows the content of the directory c:/winnt
    • cd c:/; ls /winnt - changes current drive to c: and shows the content of the directory c:/winnt
    • cd d:/; ls /winnt - changes current drive to d: and shows the content of the directory d:/winnt

    There are some other differences, most of them have been added to simplify the usage of existing un*x shell scripts:

    • If a shell script starts with an interpreter specification like #!/path/interpreter , the interpreter is searched in the PATH environment instead of /path . E.g. a Perl script starting with #!/bin/perl will be started with perl.exe from the PATH environment variable.
    • win-bash doesn't use any dlls or registry keys

    How can I change the drive?

    Use the cd command. The drive letter is optional and can be added at the head of the directory followed by a colon. If the drive letter is given, the current drive is changed. The root directory / always points the the current drive's root dir.

    To change to the root directory on drive c: write:

     cd c:/

    Why did you port the very old bash 1.14.2 and not any newer version?

    win-bash is based on nt_bash which was based on bash 1.14.2. The port was primary started to make un*x shell scripts run on windows. All tested scripts worked fine with this old version, so the primary goal of the project has been reached even with this old bash version.

  • The installation of win-bash is pretty simply: Just download, unpack it and copy the bash.exe file to a path which is listed in your PATH environment variable.

    When using win-bash as the default shell for un*x shell scripts, you may which to copy bash.exe to sh.exe to make scripts starting with #!/bin/sh work.

    Remember: This is only the shell binary - it has same builtin commands, but for must purposes you would need additional un*x tools like ls, sed etc. The unxutils project provides Windows ports of often used un*x tools.