7 ms·
The Shell Hater's Handbook (2010)
- genezeta 2y ago(2010) Sadly the video seems to be missing; the whole GoGaRuCo conference site is gone, actually. Maybe it makes more sense to post the link to YT, as you did in 2022 https://news.ycombinator.com/item?id=32521080 https://news.ycombinator.com/item?id=32521080
- sundarurfriend 2y agoI tried following the slide deck (to get an idea of the content), but that's pretty rough too. The page reloads itself constantly and is very inconsistent with responding to input keys, it's not a pleasant experience. Thanks for the (indirect) link to the YouTube video, will give that a try.
- sundarurfriend 2y ago> Maybe it makes more sense to post the link to YT, as you did in 2022 Based on the comments there, it seems like OP posted this current (shellhaters.org) link then too, and it's the mods that replaced it to point to the YouTube video. Hopefully the same will happen this time around as well.
- Eisenstein 2y agoGetting a DNS error from confreaks. You can get the video here: * https://web.archive.org/web/20140207100122/http://confreaks.com/system/assets/datas/1177/original/363-gogaruco2010-the-shell-hater-s-handbook-small.mp4 https://web.archive.org/web/20140207100122/http://confreaks....
- packetlost 2y agoYouTube link for video if it's broken for others and not just me: https://www.youtube.com/watch?v=olH-9b3VJfs https://www.youtube.com/watch?v=olH-9b3VJfs Something I learned recently is that the Bourne shell (and by extension, bash and POSIX's sh) have syntax inspired by Algol 68 (source [0]), which explains some of the funkyness. One thing I've been doing recently is writing scripts in rc, the default shell for plan9. It's a bit saner syntax-wise IMO. Versions linked against readline have file-based completion, but it's otherwise not quite robust enough for me to switch away from fish as my default, but it has some things I prefer over both bash and fish. I encourage people to give rc and awk a shot, they're both small and learnable in an afternoon! [0]: https://doc.cat-v.org/plan_9/4th_edition/papers/rc https://doc.cat-v.org/plan_9/4th_edition/papers/rc
- Rendello 2y agoThe Bourne shell was hilariously written in horribly deformed C resembling ALGOL by way of macros: https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/sh/mac.h https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/sh... https://news.ycombinator.com/item?id=22191790 https://news.ycombinator.com/item?id=22191790
- packetlost 2y agoThat's amazing
- Joker_vD 2y agoInfluence of Algol 68 doesn't even really explains requirement of semicolons (or equivalently, new lines) in weird places. while false do echo 1 done if false then echo 1 fi argubaly should just work, the presence of do/then/done/fi keywords makes semicolons quite superfluous yet the correct forms are while false ; do echo 1 ; done if false ; then echo 1 ; fi Which is strange, because Algol's grammar actually prohibits ; before ELSE, FI, and OD keywords yet the Bourne shell requires them!
- Koshkin 2y agoWell, to be fair, the use of semicolons in the shell has nothing to do with their use in other languages, here they are simply line separators.
- jorvi 2y ago> One thing I've been doing recently is writing scripts in rc, the default shell for plan9. It's a bit saner syntax-wise IMO I'll stand on the point that if you're gonna forego (ba)sh compatibility, 95/100 times you might as well write Python scripts. Shell syntax generally sucks, and the only reason we still roll with it is legacy code, universal compatibility, and pipes.
- packetlost 2y agoAs someone who worked with Python professionally for like 8 years, I wholeheartedly disagree with this. Python is an ok scripting language but it's an awful command script language. The extra ceremony to just invoke another command is a complete non-starter IMO. Ruby handles the cases where a shell script makes sense way better than Python does and I still wouldn't pick Ruby. Rc's syntax is better than ba(sh), which is the point: you get things like pipes and easy commands without some of the cruft.
- yanowitz 2y agoAnd its inspiration is still great but could use a refresh: https://web.mit.edu/~simsong/www/ugh.pdf https://web.mit.edu/~simsong/www/ugh.pdf
- alkh 2y agoThanks for reminding me about this gem! :)
- musicale 2y agoA brilliant historical artifact, and the irony that macOS has been Unix for most of the Mac's existence, and that Windows has included POSIX and/or Linux for most of its existence, is not lost on me. The Dennis Ritchie anti-forward makes it even better: > The rational prisoner exploits the weak places, creates order from chaos: instead, collectives like the FSF vindicate their jailers by building cells almost compatible with the existing ones, albeit with more features. The journalist with three undergraduate degrees from MIT, the researcher at Microsoft, and the senior scientist at Apple might volunteer a few words about the regulations of the prisons to which they have been transferred.
- hamandcheese 2y agoI've grown rather fond of bash in my current role. I work mainly on developer tools and CI pipelines, both of which mean gluing together lots of different CLI tools. When it comes to this kind of work I think it is quite hard to beat the expressiveness of shell scripting. I say this as a former hater of bash and its syntax. Much credit to copilot and shellcheck, which have made complex bash ever the more write-only language than it already was.
- chasil 2y agoBash actually has more warts than competing shells because of its historic stance. My bugbear is that "alias p=printf" works well in any POSIX shell script, including bash when it is invoked as #!/bin/sh - but when called as #!/bin/bash, the alias (used in a script) fails with an error. While the Korn shell managed to evolve and comply with the POSIX standard, bash decided to split the personality, so one solution to the above alias failure is to toggle POSIX mode. Bash was forced to do this, to keep a decade of shell scrips that were written for it working. Pity. The standard for the POSIX shell looked very hard at Korn, and credits it. Bash is not mentioned.
- mort96 2y agoHuh, why wouldn't that alias work?
- photon-torpedo 2y agoGood question. Something to do with interactive mode? $ cat l.sh alias l=ls l $ sh l.sh file1 file2 l.sh $ bash l.sh l.sh: line 2: l: command not found $ bash -i l.sh file1 file2 l.sh Edit: Ah yes, the man page says so. > Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt
- mort96 2y agoThanks, I had no idea. I guess I've never used aliases in scripts, but I would've assumed that they'd just work the same as in interactive mode. Good to know.
- deleted 2y ago[deleted]
- nlawalker 2y agoI'm not familiar with the landscape - is there a "compiles to reasonably-readable [ba]sh" language that's gotten any traction anywhere? That seems like at least an interesting possible solution.
- chamomeal 2y agoThere was a pretty great-looking one that I saw on HN in the last few months. I didn’t end up trying it, and I don’t remember what it was called. There’s also babashka, which pretty much let’s you write clojure in your shell scripts.
- bewuethr 2y agoWas it https://amber-lang.com https://amber-lang.com?
- dmckeon 2y agoMight have been Oil shell, which is worth looking at: https://www.oilshell.org/ https://www.oilshell.org/
- simonmic 2y agoOil shell is the way forward for shell.
- lproven 2y agoThe only problem I have with it is that the author is terribly fond of weird self-referential puns and wordplay, and I find the docs (and posts and comments) he writes to be basically unreadable. Even the project names: osh, and ysh, and oils, where osh is short for Oil Shell, but so is OilS I think... It makes it really annoying and difficult to read, IMHO. Maybe it's just me.
- dxdxdt 2y ago[flagged]
- lproven 2y agoA video is not a handbook. A handbook is a book. There's a clue in the name. Life is too short for videos.
- phendrenad2 2y agoIf you're a shell hater, the answer isn't to write MORE shell, but to switch to something else, for the love of all things sane and normal.
- lproven 2y agoThe trouble is that all the existing xNix GUI shells suck. They suck in widely varying degrees, from ones that could suck a bowling ball through an iron water pipe, like GNOME and KDE, to ones that could merely suck a golfball through a hosepipe, like Unity and Xfce, but they all suck. There have been GUI shells that didn't perceptibly suck at all, such as early versions of the Windows 9x shell, classic MacOS, and Acorn RISC OS, but they're all largely dead and gone now.
- phendrenad2 2y agoWell, I meant people should use a real programming language. Also, I'm not sure why "bash with a real programming language syntax" isn't a thing. Apparently last time this was tried was the "C Shell" which had c-like syntax? Why don't we have a javascript-like syntax for a shell yet?
- lproven 2y agoEr. I think we're at cross purposes. What do you mean by the word "shell"? I mean "the user interface of the OS" which implies nothing about whether it's text, graphics, both, spoken word, gestural, whatever.