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

Simon Urbanek simon.urbanek at r-project.org
Fri Oct 24 15:03:53 CEST 2014


> 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.


>> 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
> 
> 
> 
> 
> 
> 
> 
> 



More information about the R-SIG-Mac mailing list