【问题标题】:How to Make my R script executable?如何使我的 R 脚本可执行?
【发布时间】:2017-09-21 10:34:55
【问题描述】:

我知道这很有可能被重复,但在此处的其他问题中,我都没有找到我的问题的答案。以下是我已经尝试过的总结。

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

我做错了什么?

【问题讨论】:

  • #!/usr/bin Rscript 绝对没有意义。我认为您正在尝试执行类似#!/usr/bin/Rscript 的操作来创建指向可执行文件的直接路径。如果那是为您存储 Rscript 的地方,那将起作用。在我看来,原始错误的“\r”部分是导致问题的原因。您是否尝试过删除整个 shebang 行并重新输入?

标签: r shebang rscript


【解决方案1】:

啊,它的回车(\r)问题,它被添加到第一行,如果你使用vi编辑器,:set list会显示它。行尾将显示为 $,回车符将显示为 ^M。

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

顺便说一句,您可以在 vi 中插入 \r,方法是进入 insert(i)/Append(a) 模式并输入 ctrl+v 然后 ctrl+m

【讨论】:

  • 原来如此,谢谢。供 emacs 用户将来参考:您可以通过执行以下操作来显示行尾:M-x revert-buffer-with-coding-system 并选择 utf-8-unix
【解决方案2】:

如果要直接指向可执行文件,则需要shebang后的完整路径(无空格):

#!/usr/bin/Rscript

正如 Ravi 指出的那样,如果此修复不起作用,那么解决方案可能只涉及删除换行符并重新放入。

我不喜欢 env 解决方法以使事情更便携,因为它使线路更加混乱,并且大多数人没有意识到它实际上是在调用另一个程序(即 env)来运行修改后的外壳中的代码。更多关于here的信息。

【讨论】:

    【解决方案3】:

    我找到的最佳答案在这里: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!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2019-01-03
      • 2021-10-19
      • 2013-12-16
      • 2010-11-16
      相关资源
      最近更新 更多