

If you've never heard of Cygwin, you're in for a treat.

I've used it for years to homogenize my environments into one where I can write scripts once and deliver them everywhere for consistent automation solutions.

A way to run native Linux apps on Windows.A DLL (cygwin1.dll) which provides substantial POSIX API functionality.A large collection of GNU and Open Source tools that provide functionality similar to a Linux distribution on Windows.It's a pain to write bash scripts that work on Linux, on Macs, and on commercial Unices, and then have to jump headlong into PowerShell and batch files to attempt to match the level of automation that I can achieve with some Bash scripting. You must rebuild your application from source if you want it to run on Windows. A way to magically make native Windows apps aware of UNIX® functionality like signals, ptys, etc. Again, you need to build your apps from source if you want to take advantage of Cygwin functionality. Note: Cygwin works equally well on Windows desktops and on server systems. Why Cygwin?Ĭygwin is still relevant if you wish to have native *nix commands available to you on the Windows platform. Yes, I know about Windows Subsystem for Linux (WSL), but Cygwin and WSL aren't the same. Cygwin gives you the power of *nix commands in your native Windows environment. There's no emulation, no virtual machine, and no extra layers between the operating system and this collection of utilities. They are, in fact, authentic open source commands compiled for the Windows platform. Setting this system environment variable allows you to execute a Cygwin command without providing the full path to the executable.

Now that Cygwin is installed and the binaries are in your system path, you're probably wondering how you make this work. To invoke Bash, open a CMD window and type bash. You're now in a Bash shell that works exactly like your Linux one does. Try a few commands such as clear, ls, ls -la, pwd, and so on. There are some differences that can be frustrating to new users if you're not aware of them. In Bash, you'll notice that your drives, C: and D:, are mounted as /cygdrive/c and /cygdrive/d, for example.
