Okay, thanks everyone for the clear explanations! Now I understand it much better.
Before I wrote to r-devel, I guessed it was probably a problem on TeX Live's side rather than R, therefore I also reported it to them and I'm still waiting for a response. If they cannot fix it, and R's system() has to use short paths, I will resort to workarounds. Many thanks again! Regards, Yihui On Tue, Oct 31, 2023 at 4:22 AM Tomas Kalibera <tomas.kalib...@gmail.com> wrote: > > On 10/30/23 21:36, Yihui Xie wrote: > > I have read about "system() not using a shell on Windows" on the help > page many times before but never understood what it means technically. > Please forgive my ignorance. I still do not understand it, but thanks > a lot for the explanation anyway! > > As the documentation says, system() on Windows runs the command directly, > without a shell (without cmd.exe). As it says, > > 'command must be an executable (extensions ‘.exe’, ‘.com’) or a batch file > (extensions ‘.cmd’ and ‘.bat’): these extensions are tried in turn if none is > supplied. This means that redirection, pipes, DOS internal commands, ... > cannot be used: see shell if you want to pass a shell command-line. ' > > Things like redirection, pipes, etc are implemented by a shell, you can use > shell() to run a command via "cmd.exe /c ...", so these would work. > > I'm just curious if the full path > would work in system() today. If it still would not work because > today's Windows is still like Windows 95 in this aspect, please ignore > my question and I will ask Microsoft for a refund. > > I am not sure if you are asking a general question or specifically still for > this use. In principle, short names are still useful to get rid of spaces > (sometimes they are not quoted correctly, sometimes they cannot be quoted > correctly such as in make). Also short names reduce the risk of running over > the path-length limits. So R uses short names when they are available, but > supports also long names and tries itself to quote properly. > > You have run into a case when an external wrapper has a bug and isn't able to > deal with short names. There could easily be other wrappers around, which > have a different bug and cannot deal with long names, e.g. because of spaces, > when passing them to other programs. Very much like in luatex. And they may > have been written in times when they actually were correct. > > Best Tomas > > Regards, > Yihui > > > > On Mon, Oct 30, 2023 at 3:03 PM Prof Brian Ripley <rip...@stats.ox.ac.uk> > wrote: > > On 30/10/2023 16:18, Yihui Xie wrote: > > Hi, > > It may have been so for 20+ years but I just discovered today that system() > would always try to use the short path of a command on Windows: > https://github.com/wch/r-source/blob/635a67/src/gnuwin32/run.c#L141 If > that's true, I wonder if it could provide an option to disable this > behavior, because we recently ran into a case in which short paths wouldn't > work. I wonder what the original motivation of using short paths was. If it > was to avoid spaces in paths, wouldn't shQuote() work? Thanks! > > No: system on Windows does not use a shell. > > The 'original motivation' was to work reliably! Back in the days of > Windows 95 when many parts of Windows only supported 8+3 names. > > Regards, > Yihui > > [[alternative HTML version deleted]] > > Please do re-read the posting guide. It has ' been so for 20+ years '. > > My apologies! Sometimes I forget to switch to the plain-text mode when > writing to R mailing lists. > > -- > Brian D. Ripley, rip...@stats.ox.ac.uk > Emeritus Professor of Applied Statistics, University of Oxford > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel