home-environment-variables-service-type does not quote things

OpenSubmitted by Maxime Devos.
Details
2 participants
  • Ludovic Courtès
  • Maxime Devos
Owner
unassigned
Severity
important
M
M
Maxime Devos wrote on 19 Mar 22:04 +0100
(address . bug-guix@gnu.org)
8edc244df527278786d4d0e1dfb33afce441546d.camel@telenet.be
Hi guix,

Consider the following home configuration:

(use-modules (gnu home) (gnu packages) (gnu home services)
(gnu services) (guix gexp) (gnu home services shells))

(define formula-of-the-day
;; TODO: add some more formulae, randomise
"$US dollar/€euro = 1.11")

(home-environment
(packages '())
(services
(list (simple-service 'extra-environment-variables
home-environment-variables-service-type
`(("formula of the (reconfiguration) day" . ,formula-of-the-day))))))

Now start a container with this configuration with "guix home container":

$ guix home container home-configuration.scm

[start output block]
WARNING: (guile-user): imported module (guix build utils) overrides
core binding `delete'
/gnu/store/[...]/setup-environment: line 33: syntax error near
unexpected token `('
/gnu/store/[...]/setup-environment: line 33: `export formula of the
(reconfiguration) day=$US dollar/€euro = 1.11'
Backtrace:
In ice-9/boot-9.scm:
1752:10 11 (with-exception-handler _ _ #:unwind? _ # _)
In unknown file:
10 (apply-smob/0 #<thunk 7f8d3bd36f40>)
In ice-9/boot-9.scm:
724:2 9 (call-with-prompt _ _ #<procedure default-prompt-handle?>)
In ice-9/eval.scm:
619:8 8 (_ #(#(#<directory (guile-user) 7f8d3bd30c80>)))
In ice-9/command-line.scm:
185:18 7 (_ #<input: string 7f8d3bd29850>)
In unknown file:
6 (eval (begin (use-modules (guix build utils) (# ?) ?) ?)
?)
In ice-9/eval.scm:
619:8 5 (_ #f)
In unknown file:
4 (primitive-load "/gnu/store/6xn1fyljn05cjgx3sakhmds88sc?")
In ice-9/eval.scm:
293:34 3 (_ #(#(#(#(#(#(#(#(#<directory ?> ?) ?) ?) ?) ?) ?) ?) ?))
159:9 2 (_ #(#(#(#(#(#(#(#(#<directory ?> ?) ?) ?) ?) ?) ?) ?) ?))
159:9 1 (_ #(#(#(#(#(#(#(#(#<directory ?> ?) ?) ?) ?) ?) ?) ?) ?))
In unknown file:
0 (string-split #<eof> #\nul)

ERROR: In procedure string-split:
In procedure string-split: Wrong type argument in position 1 (expecting
string): #<eof>
[end output block]

To investigate, I took a look at 'setup-environment':

[lots of exports]
export formula of the (reconfiguration) day=$US dollar/€euro = 1.11

There are at least two issues here:

* The variable 'formula of the (reconfiguration) day' was not quoted.

I don't know how to do this in bash though, if it is even possible
at all. If it turns out not to be possible, I'd prefer that to
be mentioned by a nice error message, e.g. "environment variable
names may not contain FOOs" or "environment variable names must
consist of BARs".

* The value '$US dollar/€euro' was not quoted, so bash would
expand $US (to the empty string, since $US is not defined).

Greetings,
Maxime.
-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYjZFfBccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7iDtAP4qk6u/F3zjHt7YxwfdZtiw8JMo
SdL/cgOOSXil9GyOZwEA/fCRGd+rZcCj/ic3zS/+ETcnDCdtyjUDUeHWVmpsEwA=
=7A3p
-----END PGP SIGNATURE-----


L
L
Ludovic Courtès wrote on 7 Apr 18:46 +0200
control message for bug #54469
(address . control@debbugs.gnu.org)
87ee28et9u.fsf@gnu.org
severity 54469 important
quit
L
L
Ludovic Courtès wrote on 14 Jul 01:13 +0200
Re: bug#54469: home-environment-variables-service-type does not quote things
(name . Maxime Devos)(address . maximedevos@telenet.be)(address . 54469@debbugs.gnu.org)
87v8s08v3n.fsf@gnu.org
Hi,

Maxime Devos <maximedevos@telenet.be> skribis:

Toggle quote (14 lines)
> (use-modules (gnu home) (gnu packages) (gnu home services)
> (gnu services) (guix gexp) (gnu home services shells))
>
> (define formula-of-the-day
> ;; TODO: add some more formulae, randomise
> "$US dollar/€euro = 1.11")
>
> (home-environment
> (packages '())
> (services
> (list (simple-service 'extra-environment-variables
> home-environment-variables-service-type
> `(("formula of the (reconfiguration) day" . ,formula-of-the-day))))))

Fixed in af4c103595a725194318f40fc5aba110772ff417… except for checking
the name of the variable.

I guess we should stick to the grammar for “names” that Bash defines
(info "(bash) Definitions") and error out if the variable name doesn’t
comply?

Ludo’.
M
M
Maxime Devos wrote on 21 Jul 14:30 +0200
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 54469@debbugs.gnu.org)
2e23d60c-f4cb-b5a0-6067-c01ef18eea19@telenet.be
On 14-07-2022 01:13, Ludovic Courtès wrote:
Toggle quote (7 lines)
> [...]
> Fixed in af4c103595a725194318f40fc5aba110772ff417… except for checking
> the name of the variable.
>
> I guess we should stick to the grammar for “names” that Bash defines
> (info "(bash) Definitions") and error out if the variable name doesn’t
> comply?
Yes -- supporting arbitrary variable names would be nice but that just
sticking to those (and erroring out) should be good enough in practice.
FWIW, (guix search-paths) also does export this="that", so it looks like
the quoting and name checking could be generalised a little to also
extend to etc/profile.
Greetings,
Maxime.
Attachment: OpenPGP_signature
?