Context
A customer on Ubuntu 24.04.4 LTS installed via the headline one-liner (curl -fsSL …/install.sh | sh) and reported the CLI was "still not in the PATH, even after restarting the shell."
Root cause
The unprivileged one-liner can't write /usr/local/bin, so install.sh falls back to $HOME/.local/bin (scripts/install.sh L240–L250) and then only prints PATH advice — it never edits a shell rc file (scripts/install.sh L262–L270).
On an Ubuntu desktop this combination is a trap:
- Ubuntu's stock
~/.profile adds ~/.local/bin to PATH, but only at login and only if the directory already existed at login. The installer creates it mid-session.
- GNOME Terminal opens non-login shells → they read
~/.bashrc (which has no such logic), not ~/.profile. So "open a new terminal" never triggers the fix; only a full logout/login does.
Net effect: a stock curl | sh install on an Ubuntu desktop leaves the CLI off PATH until the user does something non-obvious (re-login, or hand-edit an rc file the printed note doesn't even name).
Meanwhile the Windows installer already does the right thing — it persists user-scope PATH automatically (scripts/install.ps1 L205–L213). The Linux/macOS script should be no worse.
Proposed fix (any subset)
- When falling back to
~/.local/bin, offer to append export PATH="$HOME/.local/bin:$PATH" to the correct rc file (detect $SHELL: ~/.zshrc for zsh, ~/.bashrc for bash), gated on interactivity — skip when stdin isn't a TTY (the piped curl | sh case) or behind an explicit --modify-path flag — mirroring what install.ps1 already does.
- At minimum, replace the bare
export PATH note with shell-/distro-aware guidance: name the rc file, and on Linux tell the user to . ~/.profile now or re-login (a new terminal tab is not enough).
- Consider preferring
/usr/local/bin more aggressively — it's on PATH for both login and non-login shells on Ubuntu out of the box — e.g. when sudo is available.
- Add a short install-troubleshooting doc (none exists today — the repo has only the README + the RFC) covering the
~/.local/bin / PATH case for Linux (login vs non-login shells), macOS (.bash_profile vs .bashrc, zsh), and Windows (new window required), and link it from the README install section.
Acceptance criteria
- A stock
curl … | sh install on Ubuntu 24.04 desktop yields a working tracebloc command in a newly-opened terminal without a full logout/login or manual rc editing — OR the installer prints unambiguous, shell-correct next steps that work on the first try.
- The behavior is documented in a troubleshooting doc linked from the README.
- No regression to the non-interactive
curl | sh path (must not block waiting for input on a pipe).
References
- Customer OS: Ubuntu 24.04.4 LTS
scripts/install.sh — fallback to $HOME/.local/bin: L240–L250; print-only PATH advice: L262–L270
scripts/install.ps1 — auto-sets user-scope PATH: L205–L213
- Surfaced during a customer support thread (PATH-after-install).
Context
A customer on Ubuntu 24.04.4 LTS installed via the headline one-liner (
curl -fsSL …/install.sh | sh) and reported the CLI was "still not in the PATH, even after restarting the shell."Root cause
The unprivileged one-liner can't write
/usr/local/bin, soinstall.shfalls back to$HOME/.local/bin(scripts/install.shL240–L250) and then only prints PATH advice — it never edits a shell rc file (scripts/install.shL262–L270).On an Ubuntu desktop this combination is a trap:
~/.profileadds~/.local/binto PATH, but only at login and only if the directory already existed at login. The installer creates it mid-session.~/.bashrc(which has no such logic), not~/.profile. So "open a new terminal" never triggers the fix; only a full logout/login does.Net effect: a stock
curl | shinstall on an Ubuntu desktop leaves the CLI off PATH until the user does something non-obvious (re-login, or hand-edit an rc file the printed note doesn't even name).Meanwhile the Windows installer already does the right thing — it persists user-scope PATH automatically (
scripts/install.ps1L205–L213). The Linux/macOS script should be no worse.Proposed fix (any subset)
~/.local/bin, offer to appendexport PATH="$HOME/.local/bin:$PATH"to the correct rc file (detect$SHELL:~/.zshrcfor zsh,~/.bashrcfor bash), gated on interactivity — skip when stdin isn't a TTY (the pipedcurl | shcase) or behind an explicit--modify-pathflag — mirroring whatinstall.ps1already does.export PATHnote with shell-/distro-aware guidance: name the rc file, and on Linux tell the user to. ~/.profilenow or re-login (a new terminal tab is not enough)./usr/local/binmore aggressively — it's on PATH for both login and non-login shells on Ubuntu out of the box — e.g. when sudo is available.~/.local/bin/ PATH case for Linux (login vs non-login shells), macOS (.bash_profilevs.bashrc, zsh), and Windows (new window required), and link it from the README install section.Acceptance criteria
curl … | shinstall on Ubuntu 24.04 desktop yields a workingtracebloccommand in a newly-opened terminal without a full logout/login or manual rc editing — OR the installer prints unambiguous, shell-correct next steps that work on the first try.curl | shpath (must not block waiting for input on a pipe).References
scripts/install.sh— fallback to$HOME/.local/bin: L240–L250; print-only PATH advice: L262–L270scripts/install.ps1— auto-sets user-scope PATH: L205–L213