My contempt for Unix is vast, measureless, perhaps finite but certainly unbounded, but today, I hate most that basename won’t operate on stdin. That’s just … I mean, it’s … isn’t this the whole point?

I’m cooking along building up a command pipeline and some pedantic little shit decides that oh no, stdin is too pedestrian, you need to pass me arguments on the command line. It’s always these needless bleeding little string-warts of failed utility that put lie to the whole self-congratulatory ESR style “small programs that do one thing well is a morally superior way of composing software” pseudo-argument.

I’m no fan of the sort of Plan 9 exercise in seeing how many round pegs can be hammered to splinters to make a political point about metaphor, but even that looks attractive compared to a recent Unix. I’m also no big fan of the GNU style of jamming everything into everything (man cat) and of course

 The full documentation for true is maintained as a Texinfo manual

helped no person in the history of ever. I used FreeBSD when I had a chance, but none of the problems that I have with Unix can be alleviated by switching distributions. Unix is a New Jersey cockroach and it’s far too late to evict it from our lives.

I mean, my phone (and overwhelmingly likely, your phone) runs Unix. Unix!

All I’m trying to do today is strip arbitrary file extensions (don’t even get me started) without resorting to regular expressions1 and you can’t usefully chain basename/dirname calls. You can nest them using shell execution substitution, but that’s nasty syntax, and more importantly, why, POSIX cretins; why? And what’s the logic for some commands to accept stdin via ‘-’ and others to ignore it? Or is it simply a category mistake to look for an set of first principles that you can derive Unix from?

I’m not even going to get into dd. Life is too goddamned short.


  1. n-problems ↩︎