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

Reply via email to