3 ms·
Parsing, or the lack thereof, is not the point. The point is that standard shells already provide all the tools you need for dealing with lists of files. Want t
by db48x 2y ago
Parsing, or the lack thereof, is not the point. The point is that standard shells already provide all the tools you need for dealing with lists of files. Want to do something for every file? Write this:
shopt -s nullglob
for f in *; do
…
done
But never this:
for f in $(ls); do
…
done
They look similar, but the latter runs ls to turn the list of files into a string, then has the shell parse the string back into a list. Even if the parsing was done correctly (and it isn’t), this is still extra work. Looping over the glob avoids the extra work.
- Aerbil313 2y agoI have to say this is very unintuitive. In Nushell, you'd do: ls | each { ... } Another examples I don't need to explain, which would be far harder in stringly typed shells: ls | where type == file and size <= 5MiB | sort-by size | reverse | first 10 ps | where cpu > 10 and mem > 1GB | kill $in.pid It's immediately obvious what you need to do when you can easily visualize your data: > ls ╭────┬───────────────────────┬──────┬───────────┬─────────────╮ │ # │ name │ type │ size │ modified │ ├────┼───────────────────────┼──────┼───────────┼─────────────┤ │ 0 │ 404.html │ file │ 429 B │ 3 days ago │ │ 1 │ CONTRIBUTING.md │ file │ 955 B │ 8 mins ago │ │ 2 │ Gemfile │ file │ 1.1 KiB │ 3 days ago │ │ 3 │ Gemfile.lock │ file │ 6.9 KiB │ 3 days ago │ │ 4 │ LICENSE │ file │ 1.1 KiB │ 3 days ago │ │ 5 │ README.md │ file │ 213 B │ 3 days ago │ ...
- db48x 2y agoI didn’t say that nushell is bad, I said that it’s not relevant to the discussion. nushell provides typed data in pipelines, which is cool. But standard shells already have typed data for this particular use case, thus parsing untyped data is unnecessary. Of course it would be nice if that typed data could be used in a pipeline, but everything had to start somewhere.
- acureau 2y agoWho are you to decide what's relevant to the discussion? It's very clearly on topic. I had never heard of nushell and I'm glad it was mentioned
- CJefferson 2y agoHow do I replace: for f in $(cd subdir; ls); do ... done ?
- ykonstant 2y agoEither for f in subdir/*; do ... done or ( cd subdir || exit 1 for f in *; do ... done ) work fine. However, I must insist against using `for` loops in favor of `find`.