Skip to content

dnvm install script fails in non-interactive Linux environments because say is undefined #324

@richlander

Description

@richlander

I hit a bug in the installer script at:

curl --proto '=https' -sSf https://dnvm.net/install.sh | sh

on this system:

  • OS: Fedora Asahi Remix 43
  • Arch: aarch64 / arm64
  • Shell: /bin/bash
  • Invocation context: non-interactive shell / piped into sh

Observed behavior

The installer starts, then fails with:

info: downloading installer
Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure
Warning: Not enforcing TLS v1.2, this is potentially less secure
sh: line 227: say: command not found

Root cause

The script defines:

err() {
say "$1" >&2
exit 1
}

but say is never defined anywhere in the script.

On Linux, say is not a standard command, so any path that calls err() crashes with say: command not found instead of printing the intended error.

Why this may not reproduce in a normal interactive terminal

This seems to show up when the script hits an error path, especially in non-interactive contexts.

In my case, after patching in a local say() shim, the script’s intended error was:

Unable to run interactively. Run with -y to accept defaults, --help for additional options

So interactive runs may appear fine because they never hit err().

Minimal fix

Define say() in the script, or replace say with printf / echo.

For example:

say() {
printf '%s\n' "$1"
}

or just change err() to:

err() {
printf '%s\n' "$1" >&2
exit 1
}

Additional note

After working around the say issue and running with -y, the script successfully installed dnvm itself, but defaulted to installing .NET 10 on this machine. When I later tried installing the .NET 11 preview via dnvm, extraction failed with:

Error: Extract failed: Could not find file '/tmp/.../sdk/11.0.100-preview.2.../FSharp/Microsoft.NET.StringTools.dll'

Note: I asked openclaw to install dnvm/dotnet. I then asked it to write this report on what happened.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions