Python有这个方便的结构:
def do_stuff():
whatever
if __name__ == "__main__":
do_stuff(()
因此,如果文件是从包含python foo.py
或./foo.py
的命令行和相应的shebang行运行的,那么__name__
变量将设置为__main__
并且file作为脚本运行。但是,您也可以从交互式shell或其他python代码执行from foo import do_stuff
并从那里运行do_stuff
。然后,相同的脚本文件将充当模块而不是脚本。
我可以在littler
脚本中执行类似的操作吗?像foo.R
这样的东西:
#!/bin/env r
do_stuff = function(){
whatever
}
if(?run as r command_line?){
do_stuff()
}
然后我可以source("foo.R")
,这将定义do_stuff
(在我的默认全局环境中,但我们会稍微掩饰一下)。
一个可能的关键是在_
(设置为脚本名称)下运行时环境中存在littler
但是更强一些可能会更好。
答案 0 :(得分:3)
这样的事情应该有效:
#!/usr/local/bin/r --vanilla
doStuff <- function(print_me) {
print(print_me)
}
if (!interactive()) {
if (exists("argv")) {
if (!is.null(argv) && length(argv)>0) {
doStuff(argv[1])
}
}
}