Evaluate values in `Sys.setenv`

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Evaluate values in `Sys.setenv`

Wang Jiefei
Hi all,

I would like to know if there is any way to evaluate the values in
`Sys.setenv` before setting the environment variables. For example, if we
want to add a path to the environment variable `PATH`, we can do this in a
terminal

```
> export PATH=~/mypath:$PATH
> echo $PATH
/Users/jeff/mypath:...
```

However, this style of assignment is not allowed in  `Sys.setenv`, it
treats its argument as a literal string, so

```
> Sys.setenv(PATH= " ~/mypath:$PATH")
> Sys.getenv("PATH")
[1] " ~/mypath:$PATH "
```
Note that both the symbol `~` and the variable `$PATH` are not expanded.
While we can manually evaluate the home symbol `~`  and PATH using
`Sys.getenv`, the code seems not quite neat. I would like to suggest adding
a parameter in ` Sys.setenv` to make the function more convenient(e.g.
Sys.setenv(..., fixed = TRUE)) if no existing function in base R can do
them in one line.

Best,
Jiefei

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Evaluate values in `Sys.setenv`

Peter Dalgaard-2
It is the shell that does the ~ and $ expansions, and Sys.setenv() doesn't go via the shell, so you cannot expect it to understand the shell metacharacters.  Instead, you need to do the corresponding computations in R, e.g.

> paste(path.expand("~/mypath"), Sys.getenv("PATH"), sep=":")
[1] "/Users/pd/mypath:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/gfortran/bin:/usr/local/clang8/bin:/Library/TeX/texbin:/opt/X11/bin"

which you can then pass to Sys.setenv().

-pd

> On 28 Aug 2020, at 11:00 , Jeff King <[hidden email]> wrote:
>
> Hi all,
>
> I would like to know if there is any way to evaluate the values in
> `Sys.setenv` before setting the environment variables. For example, if we
> want to add a path to the environment variable `PATH`, we can do this in a
> terminal
>
> ```
>> export PATH=~/mypath:$PATH
>> echo $PATH
> /Users/jeff/mypath:...
> ```
>
> However, this style of assignment is not allowed in  `Sys.setenv`, it
> treats its argument as a literal string, so
>
> ```
>> Sys.setenv(PATH= " ~/mypath:$PATH")
>> Sys.getenv("PATH")
> [1] " ~/mypath:$PATH "
> ```
> Note that both the symbol `~` and the variable `$PATH` are not expanded.
> While we can manually evaluate the home symbol `~`  and PATH using
> `Sys.getenv`, the code seems not quite neat. I would like to suggest adding
> a parameter in ` Sys.setenv` to make the function more convenient(e.g.
> Sys.setenv(..., fixed = TRUE)) if no existing function in base R can do
> them in one line.
>
> Best,
> Jiefei
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

--
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: [hidden email]  Priv: [hidden email]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Evaluate values in `Sys.setenv`

Wang Jiefei
Thanks for your explanation. The function `path.expand` is very helpful!

Best,
Jiefei

On Fri, Aug 28, 2020 at 8:34 AM peter dalgaard <[hidden email]> wrote:

> It is the shell that does the ~ and $ expansions, and Sys.setenv() doesn't
> go via the shell, so you cannot expect it to understand the shell
> metacharacters.  Instead, you need to do the corresponding computations in
> R, e.g.
>
> > paste(path.expand("~/mypath"), Sys.getenv("PATH"), sep=":")
> [1]
> "/Users/pd/mypath:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/gfortran/bin:/usr/local/clang8/bin:/Library/TeX/texbin:/opt/X11/bin"
>
> which you can then pass to Sys.setenv().
>
> -pd
>
> > On 28 Aug 2020, at 11:00 , Jeff King <[hidden email]> wrote:
> >
> > Hi all,
> >
> > I would like to know if there is any way to evaluate the values in
> > `Sys.setenv` before setting the environment variables. For example, if we
> > want to add a path to the environment variable `PATH`, we can do this in
> a
> > terminal
> >
> > ```
> >> export PATH=~/mypath:$PATH
> >> echo $PATH
> > /Users/jeff/mypath:...
> > ```
> >
> > However, this style of assignment is not allowed in  `Sys.setenv`, it
> > treats its argument as a literal string, so
> >
> > ```
> >> Sys.setenv(PATH= " ~/mypath:$PATH")
> >> Sys.getenv("PATH")
> > [1] " ~/mypath:$PATH "
> > ```
> > Note that both the symbol `~` and the variable `$PATH` are not expanded.
> > While we can manually evaluate the home symbol `~`  and PATH using
> > `Sys.getenv`, the code seems not quite neat. I would like to suggest
> adding
> > a parameter in ` Sys.setenv` to make the function more convenient(e.g.
> > Sys.setenv(..., fixed = TRUE)) if no existing function in base R can do
> > them in one line.
> >
> > Best,
> > Jiefei
> >
> >       [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > [hidden email] mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> --
> Peter Dalgaard, Professor,
> Center for Statistics, Copenhagen Business School
> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
> Phone: (+45)38153501
> Office: A 4.23
> Email: [hidden email]  Priv: [hidden email]
>
>
>
>
>
>
>
>
>
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel