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
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions