2017-04-24 21 views
3

我知道這是一個重複的高風險,但在這裏沒有任何其他問題,我已經找到了我的問題的答案。以下是我已經嘗試過的一個總結。如何讓我的R腳本可執行?

我的R腳本文件file.r

#!/usr/bin/env Rscript 
print("Hello World!") 

這是可執行文件(chmod +x file.r),以及用於通過發出很好地運行(我最後一次使用它是大約一個月前):

$./file.r 

然而,今天:

$./file.r 
/usr/bin/env: 'Rscript\r': No such file or directory 

事實上:

which Rscript 
/usr/bin/Rscript 

因此我改變家當到:#!/usr/bin Rscript,但:

./file.r 
/usr/bin: bad interpreter: Permission denied 

然後我想我會運行它的超級用戶,但是:

sudo ./file.r 
sudo: unable to execute ./file.r: Permission denied 

讀圍繞我發現, R的全新安裝將解決我的問題,所以我沒有安裝和安裝R.不幸的是,我以前寫的仍然適用。但是請注意,以下兩種版本均適用:

Rscript file.r 
[1] "Hello World!" 

我在做什麼錯?

+0

'#!/ usr/bin Rscript'絕對沒有意義。我認爲你正在嘗試像'#!/ usr/bin/Rscript'那樣做一個可執行文件的直接路徑。如果這就是Rscript爲你儲存的情況,那就行了。在我看來,原始錯誤的「\ r」部分是導致問題的原因。你有沒有嘗試刪除整個shebang線並重新輸入? – Dason

回答

1

啊,它的回車(\ r)問題,它被添加到第一行,如果你使用vi編輯器,:set list會顯示它。行結尾將顯示爲$並且回車字符爲^ M。

#!/usr/bin/env Rscript Makes your script portable than #!/usr/bin/Rscript 

順便說一句,可以通過進入插入物(I)/追加的(a)模式和類型CTRL + V和插入在vi \ r,然後Ctrl +米

+0

就是這樣,謝謝。爲了將來可以引用emacs用戶:你可以通過執行'M-x revert-buffer-with-coding-system'並選擇'utf-8-unix'來顯示行尾。 – ZzKr

0

如果要直接指向可執行文件,那麼你需要的家當後的完整路徑(無空格):

#!/usr/bin/Rscript 

由於拉維指出,如果此修復程序不工作,然後解決方案可能只涉及刪除換行符,並把它在再次。

我不是env解決辦法的一個風扇來使事情變得更加便攜,因爲它使線條更加混亂,大多數人都沒有意識到,它實際上調用其他程序(即env),以在運行代碼修改後的shell。有關here的更多信息。