Release D 2.093.0
Bastiaan Veelo
Bastiaan at Veelo.net
Mon Jul 20 14:14:26 UTC 2020
On Sunday, 19 July 2020 at 19:16:29 UTC, jmh530 wrote:
> I just upgraded a machine to Linux Mint 20 on a fresh install
> and tried to run the install script. It fails with
> main: line 178: USERPROFILE: unbound variable
>
> This line should only be called on Windows, which I found
> strange. It turns out that this is driven by
>
> ```
> posix_terminal() {
> # If this script is run on Windows cmd by passing it as
> argument to bash.exe,
> # the shell level will be 1. If it is run from a POSIX
> terminal, it will be > 1.
> if [ "$SHLVL" = 1 ]; then
> false
> else
> true
> fi
> }
> ```
>
> Running `echo $SHLVL` prints `1`
>
> Running
> ```
> bash
> echo $SHLVL
> ```
> prints `2`
>
>
> Running `echo $SHELL` prints `/bin/bash`
>
> The issue seems to be related to an update to Ubuntu 16:
> https://askubuntu.com/questions/856532/why-is-shlvl-initially-2-in-ubuntu-16-10-but-not-earlier-versions
I don't think it is related to the Ubuntu 16.10 issue, because
the above test does not rely on SHLVL being 2 initially. If the
script is called from the terminal, and the terminal is running
bash (which it seems to do according to the output of $SHELL)
SHLVL should be at least 1 on the terminal and one higher when
the script is run (since running a script starts a new bash).
Maybe the script is run in a way that breaks this assumption? Is
it run using `call`? Is it run headless, without a terminal? Is
it not run by real bash?
There is a related conversation here, but not quite the same:
https://github.com/dlang/installer/commit/e084815001390538bbd6fe5be7c2d4d81ee681b7#commitcomment-40487617
Please open an issue on https://issues.dlang.org/enter_bug.cgi
and post a link here, if we need to drill deeper.
I can imagine that the current `posix_terminal()` is flawed if
the terminal is running a shell that is not bash, for which we
should find a solution.
--Bastiaan.
More information about the Digitalmars-d-announce
mailing list