Tomas Kalibera
2023-Oct-31 08:32 UTC
[Rd] system()/system2() using short paths of commands on Windows?
On 10/30/23 19:07, Yihui Xie wrote:> Sure. I'm not sure if it's possible to make it easier to reproduce, > but for now the example would require installing TinyTeX (via > tinytex::install_tinytex(), which can be later uninstalled cleanly via > tinytex::uninstall_tinytex() after you finish the investigation). Then > run: > > ? system2('fmtutil-sys', '--all') > ? # or tinytex:::fmtutil() if fmtutil-sys.exe is not on PATH > > and TeX Live would throw an error like this: > > ...\username\AppData\Roaming\TinyTeX\bin\windows\runscript.tlu:864: no > appropriate script or program found: fmtuti~1 > > The command "fmtutil-sys" is longer than 8 characters and hence > shortened to "fmtutil~1". Yes, in principle, TeX Live should work with > short path names, but it doesn't at the?moment. I haven't figured out > if it was a recent breakage in TeX Live or not (I've tried to contact > TeX Live developers). > > BTW, shell('fmtutil-sys --all') works fine.I can reproduce the problem, also separately from R. It is not an R problem ./fmtutil-sys.exe --version works ./fmtuti~1 --version doesn't work The problem is in runscript.tlu, when it looks at "progname", it parses it assuming it is the full name, looking for "-sys" suffix, which won't be in the short name: progname, substcount = string.gsub(progname, '%-sys$', '') local sysprog = (substcount > 0) -- true if there was a -sys suffix removed and it does further processing using the program name. This has to be fixed on the luatex end, it must be able to work with short paths (e.g. expand it appropriately). You could probably work around the installation before it gets fixed, e.g. by creating another wrapper which would expand to long names, delete the short name, patch the script, etc. After all, if it works via a shell, then probably the shell is expanding to the long names and you have a work-around (I don't know how reliable). Adding an option to R's system*() functions to use only long names doesn't make sense. Best Tomas> > Regards, > Yihui > -- > https://yihui.org > > > On Mon, Oct 30, 2023 at 12:34?PM Tomas Kalibera > <tomas.kalibera at gmail.com> wrote: > > > On 10/30/23 17: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! > > Could you please file a minimal reproducible example that exhibits > the > problem caused by an attempt to translate to short path names (note > there is a fallback to long path names)? In principle, short path > names > should work when they are returned by Windows, this should not be > causing any trouble. > > Thanks > Tomas > > > > > Regards, > > Yihui > > > >? ? ? ?[[alternative HTML version deleted]] > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Duncan Murdoch
2023-Oct-31 09:05 UTC
[Rd] system()/system2() using short paths of commands on Windows?
On 31/10/2023 4:32 a.m., Tomas Kalibera wrote:> > On 10/30/23 19:07, Yihui Xie wrote: >> Sure. I'm not sure if it's possible to make it easier to reproduce, >> but for now the example would require installing TinyTeX (via >> tinytex::install_tinytex(), which can be later uninstalled cleanly via >> tinytex::uninstall_tinytex() after you finish the investigation). Then >> run: >> >> ? system2('fmtutil-sys', '--all') >> ? # or tinytex:::fmtutil() if fmtutil-sys.exe is not on PATH >> >> and TeX Live would throw an error like this: >> >> ...\username\AppData\Roaming\TinyTeX\bin\windows\runscript.tlu:864: no >> appropriate script or program found: fmtuti~1 >> >> The command "fmtutil-sys" is longer than 8 characters and hence >> shortened to "fmtutil~1". Yes, in principle, TeX Live should work with >> short path names, but it doesn't at the?moment. I haven't figured out >> if it was a recent breakage in TeX Live or not (I've tried to contact >> TeX Live developers). >> >> BTW, shell('fmtutil-sys --all') works fine. > > I can reproduce the problem, also separately from R. It is not an R problem > > ./fmtutil-sys.exe --version > works > > ./fmtuti~1 --version > doesn't work > > The problem is in runscript.tlu, when it looks at "progname", it parses > it assuming it is the full name, looking for "-sys" suffix, which won't > be in the short name: > > progname, substcount = string.gsub(progname, '%-sys$', '') > local sysprog = (substcount > 0) -- true if there was a -sys suffix removed > > and it does further processing using the program name. > > This has to be fixed on the luatex end, it must be able to work with > short paths (e.g. expand it appropriately). You could probably work > around the installation before it gets fixed, e.g. by creating another > wrapper which would expand to long names, delete the short name, patch > the script, etc. After all, if it works via a shell, then probably the > shell is expanding to the long names and you have a work-around (I don't > know how reliable). > > Adding an option to R's system*() functions to use only long names > doesn't make sense.On the other hand, not modifying the executable name would make a lot of sense, wouldn't it? I'm pretty sure all supported versions of Windows can handle long filenames. Duncan Murdoch
Maybe Matching Threads
- system()/system2() using short paths of commands on Windows?
- system()/system2() using short paths of commands on Windows?
- system()/system2() using short paths of commands on Windows?
- system()/system2() using short paths of commands on Windows?
- Problemas con tinytex (base Latex)