Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Post History

75%
+4 −0
Q&A What unexpected things can happen if a user runs commands expecting a text file on input lacking a file-final newline?

I would consider your own tools as the central use case. Seriously, do you want to litter every while read (or your language's equivalent) with this pesky corner case handling? while read -r line ...

posted 1y ago by tripleee‭

Answer
#1: Initial revision by user avatar tripleee‭ · 2023-07-15T19:54:26Z (over 1 year ago)
I would consider _your own tools_ as the central use case. Seriously, do you want to litter every `while read` (or your language's equivalent) with this pesky corner case handling?

```
while read -r line || [ -n "${line-}" ]
do
    : something with "$line"
done <"$input_file"
```

Having a single well-defined behavior also reduces the need for speculation. With malformed files, what exactly should `tail -n 1` return? Which line(s) should the `$` address in `sed` (which matches on the final line in well-formed files) match on?

You might argue what you think the "obvious" answer to these questions should be, but since that's non-standard behavior, you can never rely on these constructs to work portably, and so you are needlessly restricting the usefulness of your scripts.

As noted elsewhere, `cat` and `wc -l` on malformed files are another two use cases which commonly fail; but the vast bulk of broken tools will probably be local or informal tools which were never tested for this particular corner case.