Hacker News new | ask | show | jobs
by mongol 1009 days ago
In a way, this is cool. But I am also confused. Why does a shell include commands? Is this the beginning of a new type of distribution? A new type of GNU perhaps? Probably not. But I am not completely following what this provides that the two projects independently would not.
6 comments

I presume the reason they do it is that the premise of Nushell is that it uses pipes of structured output instead of simple text streams. That means that they need all the tools to output datas in that form. They could include wrappers for all OS provided binaries and handle the conversion in those wrappers, but that makes you incredibly fragile to minor output or flags changes, and in many cases those wrappers would end up being more complex than the complex than the commands themselves.
Current shells include [lots of builtins](https://www.unix.com/man-page/freebsd/1/builtin/), I don't think including a `cp` or `mv` that fits a shell with a different style is that different
Good point. I wonder if there was some criteria that determined if a utility were to be a command or a builtin, originally. I thought a shell first and foremost was about working with processes, and a little less about working with files. But both are obviously needed, one way or another, so will be interesting to see what becomes of this.
Based on list seems builtin functionality is what is used to work with processes (nohup, kill, etc), environment (where, which, etc), and for shell as programming language ([, while, etc).
Yes. As an example, the source builtin would not be possible to implement as a command as a child process can't change its parent's environment. So those types of concerns play in I think.
One benefit is portability. Writing a script utilizing those commands won't depend on those tools being available, only the shell. Another potential one is performance. In the specific case of nushell which is object-based it may also needed for piping object-data.
It's actually something that bothers me about nushell. The assumption seems to be that you have to parse the output of external commands. I think that ideally there should be some metadata that an executable could have to indicate that it can output structured data and nushell could pick it up without the user having to explicitly parse it. That way you could write commands that work on other shells but work better on shells that understand structured data.
> Why does a shell include commands?

I'd like to think in part for us poor souls who must work on a Windows machine but are used to working in a Linux shell.

I suppose this particular shell includes a ton of functions/commands already.