【问题标题】:shebang line not working in R scriptshebang 行在 R 脚本中不起作用
【发布时间】:2011-03-08 20:57:10
【问题描述】:

我有以下脚本

#!/usr/bin/Rscript

print ("shebang works")

在名为 shebang.r 的文件中。当我使用 Rscript 从命令行运行它时,它可以工作

$ Rscript shebang.r

但是当我单独从命令行运行它时

$ shebang.r

它不起作用。找不到 shebang.r 命令。

如果我输入(基于我见过的其他示例)

$ ./shebang.r

我的权限被拒绝。

是的,Rscript 位于 /usr/bin 目录中

【问题讨论】:

    标签: r ubuntu shebang


    【解决方案1】:

    使文件可执行。

    chmod 755 shebang.r
    

    【讨论】:

    • 成功了!除了 755 之外还有其他选择吗?我打算在我的笔记本电脑上执行命令。谢谢。
    • @Milktrader:需要的是试图运行该文件的人对其具有执行权限。阅读chown 的手册页和“长格式”(即ls -l)上的ls 手册页部分。
    • 只要您是文件的所有者,为所有者设置可执行位的任何操作都应该有效。最低限度,您需要100,但您将无法再读取或写入它。您可能至少需要700,它授予所有者读取、写入和执行权限,但拒绝其他所有人(root 除外)的所有权限。
    • 感谢所有 chmod MAN 页面参考。它有我需要的所有信息
    【解决方案2】:

    除了 Sjoerd 的回答...仅检查环境变量 PATH 中列出的目录以查看要运行的命令。如果当前目录(称为.)不在您的PATH 中,您需要输入./shebang.r(而不仅仅是shebang.r)。

    要检查PATH,请键入

    echo $PATH
    

    要将. 添加到PATH,请键入

    export PATH="$PATH:."
    

    您可以将此行添加到您的~/.bashrc,以便在您打开新外壳时自动执行。

    【讨论】:

    • 是的,我确实需要使用 ./shebang.r 才能让它工作。有人告诉我添加 . PATH 变量会带来安全风险,但我还是可以这样做,因为它是我的个人计算机,而且我上面没有导弹发射代码。
    • 安全风险在于,您可能位于其他人放置的目录中,例如,您可能会意外执行名为 ls 的程序。如果. 在您的PATH 中是最后一个,则风险非常小,因为通常的/bin/ls 将优先,而. 只会在不存在命令的情况下被搜索。尽管如此,我还是建议不要将. 添加到root 用户的PATH,因为潜在的损害更大。进一步查看listman.redhat.com/archives/redhat-list/1999-July/msg01969.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2019-03-28
    • 2015-03-04
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多