What happened

Simple Network Dashboard is a self-hosted web tool you install on a Linux box to watch your network. It ships an install.sh that the README tells you to run with sudo bash install.sh. The script was written on Windows: it looked fine in the editor, but on the Linux machine it is meant for, running it failed.

The artifact

The failure is the classic carriage-return break. A shell script written on Windows ends each line with two bytes, a carriage return and a line feed (CRLF), where Linux shells expect a line feed alone (LF). The shell reads the stray carriage return as part of the command:

install.sh: line 2: $'\r': command not found

The exact line and message vary with how the script is run and where the first stray carriage return lands. The wording above is the representative CRLF-on-Linux failure, not a log captured from a specific run.

Root cause

The repository already had a .gitattributes with * text=auto, which asks git to normalize line endings on its own judgment. For ordinary text that is usually enough, but it left room for install.sh to be checked out with the Windows carriage returns attached. A shell script is not ordinary text: every line is a command, so a carriage return an editor would silently ignore becomes part of what the shell tries to run. Nothing forced this file type to LF, and the one platform that never sees the problem is the Windows machine it was written on.

The fix

One line added to .gitattributes, forcing LF on every shell script regardless of the platform it is checked out on:

*.sh text eol=lf

Every .sh file now lands on disk with LF endings on Windows and Linux alike, so the copy that ships in the release tarball runs on the Linux box the same way it read in the Windows editor. The fix belongs in version control, not the script, because the corruption is in how the file is stored and checked out, not in anything the script does.

Evidence boundary

This is about how a shell script’s bytes survive being written on one operating system and run on another, not a claim about the script’s logic, which was never the problem. The .gitattributes rule fixes shell scripts committed after it is in place; a file already stored with carriage returns has to be renormalized once for the rule to take effect. The error above is the documented CRLF failure mode, marked as representative rather than captured from this repository.

Source ledger

Source owner Primary URL Review class Last reviewed Exact claim or evidence mapped
JDE-Projects Simple Network Dashboard https://github.com/JDE-Projects/Simple-Network-Dashboard/commit/12c858f45ab636778c727b5dafe0ab2f07ec6617 Production evidence August 19, 2026 The commit that added *.sh text eol=lf to force LF endings on shell scripts.
JDE-Projects Simple Network Dashboard https://github.com/JDE-Projects/Simple-Network-Dashboard/blob/0d35749f0779151dd6591ebe86463b230a1acfef/.gitattributes Production evidence August 19, 2026 The current rule set, including the *.sh eol=lf line.
JDE-Projects Simple Network Dashboard https://github.com/JDE-Projects/Simple-Network-Dashboard/blob/0d35749f0779151dd6591ebe86463b230a1acfef/README.md Production evidence August 19, 2026 The documented install step, sudo bash install.sh, on a Linux host.
Git https://git-scm.com/docs/gitattributes Framework-critical August 19, 2026 text and eol attributes control line-ending normalization on checkout.