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.
- Sourceforge Project Page -> http://sourceforge.net/projects/win-bash/
- Download -> https://sourceforge.net/projects/win-bash/files/shell-complete/latest/
- EGCS Development Toolchain for GNU-Mingw32 -> The MinGW Compiler and Tools
- GNU utilities for Win32 -> The unxutils project
- ViewCVS -> http://win-bash.cvs.sourceforge.net/viewvc/win-bash/win-bash/
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.Examples:
- 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:
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 shell.w32-ix86.zip, 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.