7 ms·
Dune: A Shell by the Beach
- yewenjie 5y agoAll the best to this project but since new cool shells keep coming up in the frontpage here, I am wondering if anybody is using an alternative shell as a daily driver and getting considerably more out of it?
- bobbylarrybobby 5y agoIs fish still considered alternative? The completions and suggestions still make it my go to. Thankfully it’s also started to bring its syntax inline with bash (e.g., by accepting `&&` in addition to `and;`)
- mst 5y agoI think that may be the paradox here. If it gets a significant userbase, it's much less clearly "alternative" anymore.
- ilaksh 5y agoI have also been using fish for years. But seeing how nice the scripting is that is built into Dune makes me want Dune features in fish. Or for Dune to get the autocomplete that fish has.
- yewenjie 5y agoI use fish and enjoy it, really cannot go back to zsh - feels too bloated. However, fish is not radically different from bash/ POSIX shell the way, lets say babashka [0] is. [0] https://github.com/babashka/babashka https://github.com/babashka/babashka
- HKH2 5y ago> Babashka is a tool you can use inside existing shells like bash and it is designed to play well with them. It does not aim to replace them.
- HKH2 5y agoI guess it depends on what you mean by 'considerably more'. I use Fish because you can quickly change options and view info in the config GUI, and I like its completions. I still script in Bash though.
- antongribok 5y agoI've been using Xonsh for the past 3 years. I really can't go back Bash. I write lots of small scripts and utilities for myself, perhaps on average one per week. Random stuff, like: slicing json data, renecoding home videos with ffmpeg, querying APIs with requests module, loops, dictionary comprehensions, etc... If some script needs to be deployed to production, it's fairly easy to rewrite it in plain Python. I've resisted installing it on our production systems, but I'm thinking more and more of using XXH for this instead.
- Aditya_Garg 5y agoIf you know python, then why bother with shell scripts in the first place?
- laumars 5y agoBecause if the main bulk of your problem is getting solved with external executables, like the ffmpeg example given, then it makes more sense to call them from a scripting language that is designed around forking other processes. Python be far more powerful than your average shell but it sucks for writing shell scripts.
- Joker_vD 5y agoThe thing is, bash kinda sucks at managing subprocesses the moment you start doing anything even slightly more interesting than "wait for the single launched subprocess/the last process in the pipe" (in fact, all UNIXes suck at it because of their fragile PID management but let's talk about the shell in particular). For example, imagine you want to run two processes in parallel and wait until both of them end; and you also want to be able to press Ctrl+C and interrupt them both. The cleanest way I could've find after much googling is ( trap 'kill 0' SIGINT worker A & worker B & wait ) It's a very delicate pattern because, for example, the use of subshell here is critical: without it SIGINT doesn't get delivered to the "worker" processes. One would think such a useful workflow ought to have a better built-in support but apparently not: people reinvent it all the time with $! and manual PID files and those things are very unreliable.
- deleted 5y ago[deleted]
- a1369209993 5y ago> if anybody is using an alternative shell as a daily driver and getting considerably more out of it? I wrote my own. Originally motivated by the fact that bash doesn't handle `$VARWITHSPACES` correctly (if I want expansion, I can write `$@VARWITHSPACES`), but I get a surprising amount of mileage out of random features shoved into corners of the substitution syntax like: $ factor $@m/[0-9]+/$[(1<<15)-((2*$0)-1)]/q'1 2 3' 32767: 7 31 151 32765: 5 6553 32763: 3 67 163 (`$q''` produces a string, `$@m/regex/pat/` finds matches in it and expands `"pat"` for each with $0,$1,... set to captures, and $[expr] evaluates match expressions.)
- a1369209993 5y ago> and $[expr] evaluates match expressions. Math. It evaluates math expressions. (I already had the logic handy since `${...}ARRAY` needs it to pick out a element of `$@ARRAY`.)
- hnlmorg 5y agoI've been using murex as my primary shell for years. Why do I use it? Because Bash (et al) syntax sucked for solving common modern day problems (like iterating through anything that isn't just a list of words, like the way variables are expanded in a dumb way (resulting in problems like spaces in file names breaking scripts), like how working with tables, json or other structured data requires inlining another language (aws, sed, jq, Perl, etc). and so on and so forth) So I created my own shell to fix these problems And while I was at it, I took influences from IDE to build out a better interactive terminal too. (I should probably write a blog post about some of the design decisions behind my shell)
- unixhero 5y agoWell this guy is a genious. Congrats on the release.
- jsilence 5y agoImpressive indeed. But not sure whether I'd want a widget system built into my shell. Sort of breks the UNIX philosophy, doesn't it?
- unixhero 5y agoThat is okay (unix philosophy) if puritan values should be followed. However this is designed for cosyness. I get it.
- xyzzy_plugh 5y agoReminds me of abduco + dvtm, which was pretty bananas to use, but felt _right_ and very unixy. Though, I just use screen now.
- mst 5y agoCurrently, I use abduco for 'isolated persistent sessions' and then if I need a layout on top of that, resume the abduco instances inside panes in a tmux layout. I could quite possibly replace tmux with dvtm but I'd been doing screen then screen+dtach then tmux+dtach before that so tmux+abduco was an incremental improvement that kept most of my workflow intact.
- nerdponx 5y agoIt's probably worth noting that Dune is already the name of the OCaml build system. Other than that, this is a really interesting and creative project. I'm curious what it will be like to use it in a "real" session, I might have to download it and try it.
- cushychicken 5y agoIt's called "Dune" and yet I can't find a single Arrakis reference in the repo?!
- ljm 5y agoProgrammers have tried and failed? No, programmers have tried and died.
- lukifer 5y ago[wheels, plans].forEach(x => x.push(x))
- cushychicken 5y agoTook me a second but I get it
- RJIb8RBYxzAMX9u 5y agoThe BG really should have better functional / unit tests. That off-by-one error sure threw millennia of work out of whack.
- madrox 5y ago“A process cannot be understood by stopping it. Understanding must move with the flow of the process, must join it and flow with it.” - Frank Herbert in his intro to distributed systems programming class
- nix23 5y agoThat's why Bryan Cantrill wrote the Orange Catholic Bible..ehh DTrace
- spenczar5 5y agoIt is lovely to see someone sharing software work they did just because they find it subject interesting and fun, not to make a buck or pad a portfolio. This has some good hacker vibes, harder and harder to find these days. Bravo.
- apignotti 5y agoTry it online: https://nextrepl.leaningtech.com/dune.html https://nextrepl.leaningtech.com/dune.html Powered by CheerpX: A WebAssembly virtual machine for X86 executables. Please note that is a sneak preview of our tech, we plan to release it soon to the public. Stay tuned. https://twitter.com/leaningtech https://twitter.com/leaningtech https://twitter.com/alexpignotti https://twitter.com/alexpignotti
- stjo 5y agoPlease share more, this is amazing https://nextrepl.leaningtech.com/?python3 https://nextrepl.leaningtech.com/?python3
- a_bonobo 5y agoI'm really impressed by sandbox.bio, which is also built on top of WebAssembly: https://sandbox.bio/ https://sandbox.bio/ It lets you run bioinformatics tutorials in a shell on your own machine via JavaScript (xterm.js)/WebAssembly
- akkartik 5y agoDoes this support pipes? It's not clear to me what runs in the same process and what forks a new one. Is there a way to run some shell code in a sub-process (parentheses in conventional shell)? Asynchronously (& in conventional shell)?