[R-SIG-Mac] sh: convert: command not found

Kevin Ushey kevinushey at gmail.com
Sat Oct 25 20:25:28 CEST 2014


I've noticed that the PATH is actually duplicated in e.g. R.app (when
launched from the dock).

    > env <- Sys.getenv()
    > as.list(env[names(env) == "PATH"])
    $PATH
    [1] "/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"

    $PATH
    [1] "/usr/bin:/bin:/usr/sbin:/sbin"

It is the second of these that `system` sees:

    > system("echo $PATH")
    /usr/bin:/bin:/usr/sbin:/sbin

but if we explicitly unset and reset the PATH, we get the (expected?) PATH back:

    > Sys.unsetenv("PATH")
    > Sys.setenv(PATH = "/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin")
    > system("echo $PATH")
    /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

There are a number of other environment variables that are duplicated
as well, e.g.

    > names(env[duplicated(names(env))])
    [1] "Apple_PubSub_Socket_Render" "DISPLAY"
"HOME"
    [4] "LOGNAME"                    "PATH"
"SHELL"
    [7] "SSH_AUTH_SOCK"              "TMPDIR"                     "USER"

No idea if this is expected or meaningful, but I thought I would post
this for posterity.

Cheers,
Kevin

On Sat, Oct 25, 2014 at 3:01 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> On 24/10/2014, 9:03 AM, Simon Urbanek wrote:
>>
>>> On Oct 24, 2014, at 7:36 AM, peter dalgaard <pdalgd at gmail.com> wrote:
>>>
>>>
>>> On 24 Oct 2014, at 12:55 , Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
>>>
>>>> On 24/10/2014, 1:37 AM, Simon Urbanek wrote:
>>>>>
>>>>> On Oct 24, 2014, at 12:22 AM, Emma Sherratt <emma.sherratt at gmail.com> wrote:
>>>>>
>>>>>> Dear Mac R community,
>>>>>>
>>>>>> I wonder if anyone else has come across this issue. After installing the
>>>>>> new Mac OS10.10 Yosemite, I am now having a strange problem.
>>>>>>
>>>>>> I'm trying to use movie3d and run similar functions based on this I have
>>>>>> written myself.
>>>>>>
>>>>>> Specifically, when I run
>>>>>>
>>>>>>> system("convert --version")
>>>>>> sh: convert: command not found
>>>>>>
>>>>>> yet, it is not a path issue.
>>>>>>> Sys.getenv("PATH")
>>>>>> [1]
>>>>>> "/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/git/bin:
>>>>>> */opt/ImageMagick/bin*:/usr/texbin"
>>>>>>
>>>>>
>>>>> It is, because Yosemite ignores PATH for processes started from a GUI application. You will see if you run
>>>>> system("echo $PATH")
>>>>>
>>>>> You have to use full paths in Yosemite for anything that is not on the "sanctioned" PATH -- or use R from the shell.
>>>>
>>>> What is the best way to find the full path to a command there, since
>>>> Sys.which() sees the same PATH as system() does?
>>>>
>>>> Alternatively, how do you modify the PATH that system() sees?
>>>>
>>
>> From what I've read you can't from the parent process. You have to set it in the child process once it's created - that's how some people have worked around it.
>
> What about doing it from outside the process?  How would I (running as
> superuser) change the path that GUI apps see, so that they can all see
> ImageMagick's convert, for example?
>
> Duncan Murdoch
>
>>
>>
>>>> Duncan Murdoch
>>>>
>>>> _______________________________________________
>>>> R-SIG-Mac mailing list
>>>> R-SIG-Mac at r-project.org
>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>>
>>>
>>> Disclaimer: I'm at the office computer right now, still on Mavericks.
>>>
>>> In my limited experimentation, I found that you can pass the PATH explicitly as in
>>>
>>> path <- Sys.getenv("PATH")
>>> cmd <- paste("PATH=", path, "; which pdflatex")
>>> system(cmd)
>>>
>>> I don't recall needing to export PATH, and there could be complications with the shell flavour (sh, ash, bash, zsh, ...). Also, I think it wants to be two commands with the intervening semicolon, but it might work without it. Anyways, give it a try.
>>>
>>
>> I think it's better without so it is inherited implicitly, i.e.
>> system(paste0("PATH=",shQuote(Sys.getenv("PATH"))," which pdflatex"))
>>
>> As said above, it has to happen in the child process, that's why this works.
>>
>> Since this is a security measure, I'm not sure that we want to work around it in R. Moreover, the PATH in LS apps has always been different, so you had to alway exert some effort to make it match - in that sense it's not new, just more complicated ;) However, I can see that it surprises people, so I'm not sure what to do about it.
>>
>> Cheers,
>> Simon
>>
>>
>>
>>
>>> --
>>> Peter Dalgaard, Professor,
>>> Center for Statistics, Copenhagen Business School
>>> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
>>> Phone: (+45)38153501
>>> Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac



More information about the R-SIG-Mac mailing list