如何使我的R脚本可执行?

时间:2017-04-24 16:24:57

标签: r shebang rscript

我知道这很有可能成为重复,但在这里没有其他问题我找到了我的问题的答案。以下是我已经尝试过的摘要。

我有一个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 

因此我将shebang改为:#!/usr/bin Rscript,但是:

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

然后我想我会以超级用户身份运行它,但是:

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

阅读我发现R的全新安装将解决我的问题,所以我卸载并安装了R.不幸的是我之前写的仍然适用。但请注意,以下适用于shebang版本:

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

我做错了什么?

3 个答案:

答案 0 :(得分:9)

啊,它的回车(\ r)问题,它被添加到第一行,如果你使用的是vi编辑器, $searchTerm = "Adam Pratt"; return User::select(User::table().'.*')) ->where(function($query) use ($searchTerm){ $query->whereRaw("CONCAT(first_name, ' ', last_name) LIKE '%".$searchTerm."%'"); }) ->orLike(User::table().'.email',$searchTerm) ->orderBy('first_name', 'asc') ->orderBy('last_name', 'asc') ->get(); 会显示它。行结尾将显示为$和回车字符为^ M。

:set list

顺便说一句,您可以通过进入insert(i)/ Append(a)模式并在ctrl + v然后按ctrl + m

进入vi

答案 1 :(得分:2)

如果你想直接指向可执行文件,那么你需要shebang之后的完整路径(没有空格):

#!/usr/bin/Rscript

正如Ravi指出的那样,如果这个修复工作不起作用,那么解决方案可能只涉及删除换行符并再次将其放入。

我不是env解决方法的粉丝,因为它会使线条更容易混淆,而且大多数人都没有意识到它实际上正在调用另一个程序(即env)在修改后的shell中运行代码。有关here的更多信息。

答案 2 :(得分:0)

我找到的最佳答案在这里:env: python\r: No such file or directory

Open the file in vim or vi, and administer the following command:

:set ff=unix

Save and exit:
:wq

Done!