Rscript не может найти файл, используя путь cygwin

Я запускаю cygwin в Windows 7 и у меня проблемы с Rscript. Я хотел бы запустить файл R как сценарий R в каталоге bin, но Rscript, похоже, имеет проблемы с именами путей cygwin. Вот пример файла Rscript.

$ which test.R
/cygdrive/e/Glenn/bin/test.R
$ ls -l /cygdrive/e/Glenn/bin/test.R
-rwxr-xr-x+ 1 Glenn None 36 Jan  6 08:06 /cygdrive/e/Glenn/bin/test.R
$ cat /cygdrive/e/Glenn/bin/test.R
#!/usr/bin/env Rscript
print("hi")

Основная проблема - ошибка при попытке запустить test.R

$ test.R
Fatal error: cannot open file '/cygdrive/e/Glenn/bin/test.R': No such file or directory

При диагностике проблемы я обнаружил, что могу выполнить код с использованием Rscript явно, но не в том случае, если используется путь в стиле cygwin.

$ Rscript /cygdrive/e/Glenn/bin/test.R
Fatal error: cannot open file '/cygdrive/e/Glenn/bin/test.R': No such file or directory

$ Rscript E:/Glenn/bin/test.R
[1] "hi"
$ which Rscript
/cygdrive/c/Program Files/R/R-3.1.2/bin/Rscript

Я хотел бы решить проблему или найти хороший обходной путь.

Поняв проблему лучше благодаря ответу @varro, я написал этот хак:

$ cat ~/bin/myRscript
#!/bin/bash
winpath=$(cygpath -d "$1")
shift
Rscript $winpath "$@"

Затем я переписал test.sh:

$ cat ~/bin/test.R
#!/usr/bin/env myRscript
print("hi")

Это работает, но мне не нравится хак, и я хотел бы более портативное решение.

$ which test.R
/cygdrive/e/Glenn/bin/test.R
$ test.R
[1] "hi"

person grbruns    schedule 06.01.2018    source источник


Ответы (1)


Судя по расположению Rscript в «Program Files», это не похоже на программу Cygwin, поэтому, конечно, она не поймет пути Cygwin. Если вы хотите запустить его в среде Cygwin, вам необходимо установить версию R для Cygwin, которая, как я полагаю, доступна в Cygwin Ports.

person varro    schedule 06.01.2018
comment
Спасибо - это имеет смысл! Тем не менее, меня беспокоит установка версии R для Cygwin, поскольку я активно пользуюсь R и использую RStudio и т. д., особенно если R не поддерживается в самом Cygwin. - person grbruns; 06.01.2018
comment
Я могу это понять, но вам придется сбалансировать преимущества и недостатки использования версии R для Cygwin. Что я могу сказать вам, так это то, что не-Cygwin R не сможет понять пути Cygwin. Я лично никогда не использовал R, поэтому не могу дать вам никаких советов, кроме этого. - person varro; 07.01.2018
comment
Большое спасибо за хороший совет. Вы увидите, что я отредактировал сообщение, чтобы показать уродливый хак, который, кажется, работает — по крайней мере, для моей текущей проблемы. - person grbruns; 07.01.2018
comment
Поздравляем с тем, что вы нашли обходной путь, хотя это и не самое элегантное решение. - person varro; 07.01.2018