Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

How does this compare to nushell? I am in the market to learn something other than bash and right now nushell seems like the best candidate.


I wrote marcel. In my view, nushell and marcel are very similar. nushell has tabular output, which I haven't thought was all that useful.

Marcel is python-based. The nushell guys have had to invent a lot of language. By basing marcel on python, I don't have to invent language. Any logic to be added is expressed in python. E.g, do a recursive listing of files and find those that changed in the last 3 days:

    ls -fr | select (f: now() - f.mtime() <= days(3))
The stuff inside the parens is a python function, applied to a File f, piped in from ls. (Marcel lets you omit "lambda".)

Lots of marcel examples here: https://marceltheshell.org


This looks interesting, but the examples don't really show off Marcel's power. The example you just gave without Marcel is:

  find . -type f -mtime -3
The example on this page: https://www.marceltheshell.org/list-processes

  ps -u djt | map (p: p.signal(9))
That's:

  pkill -9 -u djt
The example for summing files by extension is a bit more interesting:

  ls -fr | map (f: (f.suffix, 1)) | red. + | sort
Vs something like:

  find . -type f | awk -F. '(NF>1){print "."$NF}; (NF==1){print ""}' | sort | uniq -c
That said, every time I look into one of these shells, I end up sticking with bash. When it gets to the point that I need something more powerful than bash and the Unix command line environment, I'd just as soon write a stand-alone program which I can check into version control, use on remote systems that don't have one of these fancy shells installed, add proper tests, etc.

This is a neat project though. I'll keep an eye on it.


Using the output of find into another program is not safe due to risk of file names containing delimiters. You need to use find -exec.

Good example of why machine readable output is important. Agree that the tutorial should showcase more and larger such examples.


Yes, I know that, but it's also exceedingly rare for a filename to contain a newline and using -exec is extremely inefficient. I also wrote that on my iPad. Typically I'd use a combination of -print0 and xargs -0 for anything more formal than a one-liner on the command line.

The larger bug in my example is that it fails if any of the directories in the path contain a "." in their name!


xargs also is good to use on big argument lists because it can parallelize the processing of arguments with the '-n' and '-P' flags.


[flagged]


It's one example. I didn't realize the mistake when I wrote it. I wrote my comment in good faith. What's with the interrogation?


You can always use -print0. I suppose there is some risk of a null slipping into a filename but I’ve never come across it myself.


> some risk of a null slipping into a filename

Only in some fairly esoteric environments: https://en.wikipedia.org/wiki/Filename#Comparison_of_filenam...


Almost forgot: I also switch from bash to Python at a low threshold. In that case, I find Marcel’s API useful. I can then do shell-like piping inside of Python.


I actually agree with most of this. I tend to use Marcel for ETL sorts of processing, quick database access with data munging on either side, cluster access, etc. it works fine for basic shell usage though.

As for a more complex example: yes, the website has better examples, but they are also more involved to explain.


In that case, is it even more similar to xonsh?

https://xon.sh/


I posted a comparison to xonsh elsewhere in this discussion.


Marcel looks really interesting.

As someone who's leaned into Nushell deeply, I can tell you that the tabular and hierarchical data output is the major selling point of Nushell. For me and my team, who work with data and metadata constantly, it's an incredible productivity boost.

The major pains with Nushell are debugging pipelines that are too slow, having to learn the new language constructs, and process overhead for going in and out of Python for other pieces.


If you stick to marcel commands and python functions, then all the processing happens in a single Python process (with a small number of exceptions). Beside the process overhead, this approach also avoids serialization/deserialization costs, and even string copying costs. x | y | z just passes Python tuples from one command to another via function call.

Can you expand on your first point? Why are tabular and hierarchical output so important for your work?


marshell the cell....

sorry couldn't resist.

:)


Marcel is open source, so no.


I meant cell.


But … but it’s a shell!


shure, of course.

OK, enough!

( ´ー`) (  ̄ー ̄)ノ


weird to say, but powershell should also be on your list.


Yep. It's a very clean, powerful and well thought out API. And I'm saying that coming from a place of love towards unix and its pipes. I'd almost argue it's better than the unix model. Almost.

Been able to give poweshell commands in FOIA litigation and its power is on full display with one liners where it's hard for a gov agency to say no to something so simple.


That’s really interesting; how do you use powershell in that context? I’m assume it isn’t just

Here’s FOIA request for the output of the command

find /home/jbiden -name “*secret*doc”

haha.


It was most notably helpful in litigation against the White House Office of Management and Budget. Was suing for one week of email metadata records (to, from, CC, bcc, time, date) in the last week of Jan 2017. They said that they had no way to complete the request. So we sent them multiple one liners that extracts the info from outlook 365, which pipes it to a csv export command. They told us that they didn't run that sort of command as a routine practice, but we found a separate lawsuit that found emails of the exact command we were asking them to run.


This deserves a thread of its own! Is there any coverage of this case?


I need to write about it ;). We won that case just before the last election and unfortunately other things took priority at the time. But it'll happen. Just first need to write about my IL supreme Court loss...


I would love to read about stuff like this. I hope you'll post here when you eventually write it up.


This might quench your thirst in the meantime!

https://mchap.io/that-time-the-city-of-seattle-accidentally-...


That sounds like a joke from archer:

White House: We can’t do that.

Litigator: Can’t or won’t?

White House: either!


Cool


I've been using fish for a while myself, and I absolutely love it. The autocomplete is magic.


Honestly any interactive shell + unix tools + any scripting language you feel comfortable with should cover the majority of things you may want to do on the command line.


For a lot of 8-bit computers, BASIC was the default operating system shell.


Not exactly BASIC per se, there was some CP/M like additions. However, you're right 'cause some of those commands are BASIC extension (e.g. RUN can be used from your programme, LIST maybe, but CATalog/DIRectory or LOAD often not.) Old good time.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: