问题 shebang line不在R脚本中工作


我有以下脚本

#!/usr/bin/Rscript

print ("shebang works")

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

$ Rscript shebang.r

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

$ shebang.r

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

如果我输入(根据我见过的其他例子)

$ ./shebang.r

我被许可拒绝了。

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


9222
2018-06-27 17:09


起源



答案:


使文件可执行。

chmod 755 shebang.r

12
2018-06-27 17:14



有效!除755之外还有其他选择吗?我打算在我的笔记本电脑上搜索命令。谢谢。 - Milktrader
@Milktrader:有必要尝试运行该文件的人具有执行权限。阅读手册页 chown 和部分 ls 关于“长格式”的手册页(即 ls -l)。 - dmckee
只要您是文件的所有者,任何为所有者设置可执行位的操作都应该有效。最低限度,你需要 100,但那时你将无法再读或写它了。你可能至少想要 700,它为所有者提供读取,写入和执行权限,但拒绝其他所有人(除root之外)的所有权限。 - Thomas
也可以看看 zzee.com/solutions/unix-permissions.shtml - Thomas
要么 chmod +x shebang.r 更容易记住+ x代表eXecutable ...... - aL3xa


答案:


使文件可执行。

chmod 755 shebang.r

12
2018-06-27 17:14



有效!除755之外还有其他选择吗?我打算在我的笔记本电脑上搜索命令。谢谢。 - Milktrader
@Milktrader:有必要尝试运行该文件的人具有执行权限。阅读手册页 chown 和部分 ls 关于“长格式”的手册页(即 ls -l)。 - dmckee
只要您是文件的所有者,任何为所有者设置可执行位的操作都应该有效。最低限度,你需要 100,但那时你将无法再读或写它了。你可能至少想要 700,它为所有者提供读取,写入和执行权限,但拒绝其他所有人(除root之外)的所有权限。 - Thomas
也可以看看 zzee.com/solutions/unix-permissions.shtml - Thomas
要么 chmod +x shebang.r 更容易记住+ x代表eXecutable ...... - aL3xa


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

检查 PATH,键入

echo $PATH

加上 . 至 PATH,键入

export PATH="$PATH:."

您可以将此行添加到您的 ~/.bashrc 如果你打开一个新的shell,它会自动发生。


2
2018-06-27 17:30



是的,我确实需要使用./shebang.r才能让它工作。有人告诉我补充说。 PATH变量引入了安全风险,但我可能会这样做,因为它是我的个人计算机,并不像我有导弹发射代码。 - Milktrader
安全风险在于您可能位于其他人放置的目录中,例如,名为的程序 ls 您可能会意外执行。如果 . 是你的最后一个 PATH,风险很小,因为通常 /bin/ls 将优先考虑,并且 . 只有在不存在的命令的情况下才会搜索。不过,我建议不要添加 . 到了 PATH root用户,因为潜在的损害更大。进一步了解 listman.redhat.com/archives/redhat-list/1999-July/msg01969.html - Thomas