如何使我的 R 脚本可执行?
How to Make my R script executable?
我知道这是重复的高风险,但在 none 的其他问题中,我找到了我的问题的答案。以下是我已经尝试过的内容的总结。
我有一个 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!"
我做错了什么?
啊,是回车return(\r)的问题,加到第一行,如果你用的是vi编辑器,:set list
会显示的。行结尾将显示为 $,回车 return 字符将显示为 ^M.
#!/usr/bin/env Rscript Makes your script portable than #!/usr/bin/Rscript
顺便说一句,您可以通过进入 insert(i)/Append(a) 模式并键入 ctrl+v 然后 ctrl+m
在 vi 中插入 \r
如果你想直接指向可执行文件,那么你需要shebang之后的完整路径(没有space):
#!/usr/bin/Rscript
正如 Ravi 指出的那样,如果此修复不起作用,那么解决方案可能只涉及删除换行符并重新插入。
我不喜欢 env
使事情更便携的解决方法,因为它使行更加混乱,而且大多数人没有意识到它实际上是在调用另一个程序(即 env
) 到 运行 修改后的代码 shell。有关 here.
的更多信息
我找到的最佳答案在这里: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!
我知道这是重复的高风险,但在 none 的其他问题中,我找到了我的问题的答案。以下是我已经尝试过的内容的总结。
我有一个 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!"
我做错了什么?
啊,是回车return(\r)的问题,加到第一行,如果你用的是vi编辑器,:set list
会显示的。行结尾将显示为 $,回车 return 字符将显示为 ^M.
#!/usr/bin/env Rscript Makes your script portable than #!/usr/bin/Rscript
顺便说一句,您可以通过进入 insert(i)/Append(a) 模式并键入 ctrl+v 然后 ctrl+m
在 vi 中插入 \r如果你想直接指向可执行文件,那么你需要shebang之后的完整路径(没有space):
#!/usr/bin/Rscript
正如 Ravi 指出的那样,如果此修复不起作用,那么解决方案可能只涉及删除换行符并重新插入。
我不喜欢 env
使事情更便携的解决方法,因为它使行更加混乱,而且大多数人没有意识到它实际上是在调用另一个程序(即 env
) 到 运行 修改后的代码 shell。有关 here.
我找到的最佳答案在这里: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!