Gow – The lightweight alternative to Cygwin
github.com
github.com
Yes, there are some warts, but they're papered over remarkably well. Give mintty a shot: you'll never go back to conhost.
https://github.com/simonzack/urxvt-tabbed - is this the project you're using?
rxvt-unicode-256color
I use it on cygwin at work because I use it on linux at home, because of the tabs (which are text-based and have nothing to do with whatever desktop environment it's running in), and because the 256 colors make it easier for me to distinguish different code parts in a colored text editing session.
The default terminal in cygwin is OK, but the small number of colors were really bothering me (old eyes).
As for unicode, I've displayed Japanese and other scripts in rxvt-unicode-256color just fine.
The right terminal has two tabs open, and it shows unicode displayed in the last command.
This is on linux, it looks the same on cygwin (except it has window borders there).
I use conemu for my windows command shell. I have tried it to run a cygwin bash shell, but I recall there being some annoyances, don't remember what anymore.
But fundamentally, no, it wouldn't be better to run ConEmu and mintty, because urxvt is exactly what I like. :)
As for running mintty in conemu, it's still not quite right. If I figure it out, this will be what I recommend to people.
But for me, I like having urxvt the same at home on linux and at work in cygwin. I use urxvt's keyboard management of its tabs a lot.
No, give cmder a shot: http://bliker.github.io/cmder/ I've tried mintty and cmder, and cmder was just perfect for me.
> Think about cmder more as a software package than a separate app. All the magic is happening through Conemu. With enhancements from Clink.
But people would rather just hack up a "terminal emulator" instead of doing things the properly and the hard way.
FWIW, I took a quick stab at the tmux & ncurses code to try to find a fix, but it was far from obvious. Maximus (ConEmu author) said it had to do with how cygwin flags stdin streams, which just happens to break when ConEmu provides them. (sorry details vague)
Unfortunately it's still not quite as fast as on Linux and OS X, but it's about as fast as native/MSYS versions of Git on Windows.
It's not the number of "transitions to kernel mode" (which is actually really fast), but the cost of performing the UID mapping, especially considering that this effort is frequently wasted when programs don't bother inspecting st_uid and friends. That's why I wish the Linux xstat syscall, the one that let programs ask for just what they need, had gone through: it'd have made other systems more efficient too.
Additionally you'll find a lot of scripting language libraries just wrap gnu utils and invoke commands using a sub shell. Being able to run those scripts/libraries from batch files or other windows processes without dealing with Cygwin is awesome too.
I used that setup all the time and it worked fine for me. Mixing win32 and Cygwin binaries is the point of Cygwin, as far as I'm concerned.
I don't use MSYS, but my Cygwin installs are rooted at C:\. Win32 path functions actually accept forward slashes as well as backward slashes as path separators, so often, Win32 programs interpret paths like "/etc/passwd" just fine (with the drive resolving to C:\).
LF-versus-CRLF is an annoyance, but I've always solved it by using wrapper scripts that invoke u2d and d2u to perform the proper translation.
I think I previously my "injob" utility. Thanks to your comment, I got around to putting it on github: https://github.com/dcolascione/injob
Basic things didn't work, like "ls -t|head" (broken/missing SIGPIPE implementation IIRC), and "(g)find -iname '*.txt'" (I could not for the life of me stop it from expanding the glob).
I gave up after a couple days and went back to cygwin.
Please comment with clarifications.
I don't use Windows anymore, but if I did, I would probably just spin up a VM with a tiny live Linux ISO, because it would bring in so much other goodness without any extra effort.
It includes the majority of stuff you'd want as part of Powershell, just under different names, and not available as separate executables on the filesystem. If Powershell is lacking something, you can access any .Net class on the system. Once OneGet is released with the next version of Windows and people start packaging stuff for it, you'll be able to grab additional utilities for pretty much anything.
Windows isn't that far behind. It's mostly just not UNIX. Most things are there, just done in very different ways.
Does it have something like the POSIX fork() system call? Apparently, its lack in Windows is the main thing that makes Cygwin as slow as it is.[1]
[1] - http://stackoverflow.com/questions/2512892/how-to-speed-up-c...
Any other non UNIX OS tends not to fully provide 100% fork() in they POSIX compatibility layer, or kind of fake it.
That fork() and associated dance happens in cygwin1.dll or the equivalent POSIX compatibility library. Windows has no fork to call.
wget or curl
lftp
dig
telnet
And I mean similar features, not Invoke-WebRequest, ftp, nslookup or writing my own clone in 2000 lines of Powershell.
And to this day I have no idea why telnet was removed from the base installation.
The Windows command line is getting better with Powershell, but even Powershell can't beat 1000 man years of tool development. And I really hope that package manager takes off cause right now most Windows non-Microsoft tools are either shady or crappy.
The vast majority of what wget and curl are used for is simply downloading single files/pages. Invoke-WebRequest does that fine. It also deals with poking at most web services you're likely to come across. What service can't you use with it?
As for telnet... the removal of that was ridiculous, I'll admit.
I can't speak from broad experience but my impression was that PowerShell does a bunch of common cases fairly well but if you want something a bit different you're bashing your head on your desk.
Repeatedly.
Powershell is a wonderful concept but the ecosystem around it, except for Microsoft's own extensions, hasn't really hit puberty.
Also try writing scripts which involve native Windows commands (such as robocopy & company). Things are definitely not intuitive and the error handling is crappy. You either stay within Powershell bounds and everything is wonderful, or you step out and are in a world of pain.
It was a pain in the neck and I felt like the PS integration was awesome as long as you stayed in that ecosystem, but the second you strayed... pain.
I got bashed fairly hard with the question I asked surrounding it closed as unconstructive (it was an honest question about exactly what PS was targetted towards).
And I'm not really sold that an OS should ship with a bloated utility like modern wget rather than including a very lightweight downloader.
On the other hand, I think PowerShell is a vastly over-complicated and over-engineered response to the conceptually simple Unix shell, which is why most still favour the command line.
You need to go into Control Panel > Programs and Features > Turn Windows Features On or Off.
They, amongst other tools, are listed there.
Others have already mentioned Powershell. Not by default, but Microsoft has offered Windows Services for UNIX for some time. Free download too: http://www.microsoft.com/en-us/download/details.aspx?id=274
Truthfully, I've never used it myself, because Cygwin exists and it actually provides full POSIX on Windows, unlike GOW et al.
They haven't updated WSfU for years now.
The "contributing" page is pretty awesome, along the same lines: it describes a list of things you need to do in order to ask the maintainer to implement the feature you want.
Windows already has that, hold down shift and right click either on a subfolder or in the white space/nothing within an open folder.
Since, I dunno, XP maybe? I don't think 2000 had it. I know Vista did.
It can be reconfigured to appear without shift:
http://superuser.com/questions/240279/windows-open-command-p...
Although the Windows 8.1 right click bottom left for the new Power Users Menu was a welcomed addition that consumers could inadvertently run across.
And the maintaner does not reveal sources for the binaries, which makes it hard to help out. In practise he is acctualy breaking the GPL license, by not giving sources.
http://en.wikipedia.org/wiki/UWIN
It was originally written by David Korn, creator of the Korn shell. Can't forget "ksh -o vi", which let you edit your command history with vi commands. (It is like "set -o vi" on bash these days.) I used to use it as the last line in my .kshrc.
http://en.wikipedia.org/wiki/David_Korn_(computer_scientist)
Not sure where UWIN stands in comparison to Gow and Cygwin but it was somewhat useful. IIRC, it was at least more than a collection of UNIX utilities.
The installation procedure (from an AT&T site) was a bit of a pain but doable.
The DOS extender will not run if it detects DPMI provided by Windows, so the binaries work in both environments.
I suggest this for some Atari 800 utilities I wrote: https://github.com/jhallen/atari-tools
Good quote, but that is not necessarily a positive if you look at things from the perspective of the sooner Windows is ditched, the better.
For Windows Phones? Don't hold your breath.
That said, using Cygwin is, as far as I'm concerned, the best of both worlds. Unlike some people, I like integrating the two environments as much as possible. I install Cygwin to C:\, for example, and I added support for using native win32 widgets to Cygwin Emacs. (Try the cyg32 package. You'll like it.)
Try the "injob" utility too. It gives you native Unix job control with arbitrary Windows programs. (That it's even possible to implement it is a consequence of NT job objects being much better abstractions than POSIX process groups.)
It's easy to see that Unix shell tools are much superior to the Windows cmd. There is PowerShell which gives you more flexibility, but in my experience I have found PowerShell to be slow. It also has a totally different set of syntactic rules which aren't worth my time to learn.
Given that, I would rather install Cygwin or MinGW. Spinning up a VM is much more heavy-weight that just directly using Cygwin.
Powershell can be a little slow to launch. Actual execution speed is pretty respectable. It does get faster after the first couple of times as it will ngen stuff into the GAC (this is particularly bad on new Windows installs where little .Net code has previously ran in any contexts).
It can be fixed by running a script like this:
http://blogs.msdn.com/b/powershell/archive/2008/09/02/speedi...
Which will populate the GAC.
> It also has a totally different set of syntactic rules which aren't worth my time to learn.
You're missing out. Powershell's syntax is quite intuitive after you learn the basics, you quickly start to be able to guess commands and params.
>You're missing out. Powershell's syntax is quite intuitive after you learn the basics, you quickly start to be able to guess commands and params.
I have grown up using Unix tools and I am quite comfortable with them. If I have to learn a new shell and scripting language, there should be a demonstrable benefit for the time I spend learning it. Can you give examples where PowerShell can do something which CygWin/MinGw can't? Trying to understand why you say that I am missing out :)
As those contain full programming languages which can effectively do anything with enough effort I doubt I can.
I will say the DateTime, cultural conversion, and email libraries are an absolute pleasure to work with in Powershell/.Net. Sending out email is a totally trivial exercise regardless of the style (plain text, HTML, attachments, etc).
In classical shells, a pipe basically connects binary stdout -> binary stdin. A pipe between PowerShell cmdlets, on the other hand, can produce .NET objects directly without having to serialize them, so the pipe can connect .NET object producer -> .NET object consumer. If the consumer can't handle objects, the pipe degrades to binary stdout -> binary stdin.
For instance, the pipe in `ls | grep` is drastically different from `ls | fl`, because the latter is an in-process transfer of a .NET object collection, while the former transfers lines of text from one process to another, (in this case, to GNU Grep.)
Upside: the consumer doesn't have to "parse" stdin to get reasonable data on which it can operate.
Downside: if you want to write a consumer, you're stuck in .NET land. (Oh, how I wish I could write a consumer written in python that could advertise that it supports a specific object-oriented serialization on stdin! Then we could write a PowerShell stdin/stdout compatibility layer into python as a module... Alas, I'm guessing this task is reasonably hard.)
Oddly, I couldn't find a great readable intro to the topic, but this comes close: http://www.darkoperator.com/blog/2013/1/28/powershell-basics...
And I don't want to find every .Net equivalent of the command I use in Unix systems. Perhaps all the coreutils have counterparts in Powershell, but for all the other third party ones I use, probably not.
Powershell has access to the whole .NET features, meaning you can also expose DLL and COM objects into your Powershell session.
Other people have already mentioned that this is a much more lightweight kind of process than firing up a whole operating system in a VM. But more significantly, these utils are a bunch of .EXEs I can toss into a directory, possibly adding it to my PATH. Working (sometimes) on a "work" PC with no admin privileges, I think I can't install something like VMWare. I'd also worry about ending up with a big chunk of my memory chewed up as long as VMWare is running.
The laughter turned to open mouthed jealous amazement when I installed Cygwin and started doing everything they were at 5X speed including remotely on the servers. (Yes, firing up remote desktop and clicking file icons is slow..... go figure!)
To be frank, Cygwin is the only reason I didn't walk out the door the first week. It's generally fantastic and has been a lifesaver. I get lots of guarded curious inquiries.
Windows is getting better, but as of right now, its still pretty clumsy comparatively. Powershell looks interesting but I don't want to take the time learn all the intricacies. Anyway, I'm pretty sure it would be years before I could get around as fast as I do with Cygwin. And that assumes equivelent functionality... which I doubt at this point. Some of my Vim settings (colors etc) didn't show up correctly in Powershell for instance.
So... that's why some people would use Unix shells in Windows.
OS/2 went away, as soon as, OS/2 stopped being relevant.
POSIX was there mostly to get the foot into the door of US government, due to its requirements in POSIX compatibility.
I guess when this stopped being required and Win32 was accepted as viable platform, there wasn't a business case to keep on spending resources in POSIX support.
After all, Windows is not alone in lack of full POSIX support when one looks to embedded and mainframe OS as well.
Got a use case or two?
How is that compare to Gow?