Scheme Chicken方案是否与Perl';s$0?

Scheme Chicken方案是否与Perl';s$0?,scheme,command-line-arguments,getmodulefilename,chicken-scheme,Scheme,Command Line Arguments,Getmodulefilename,Chicken Scheme,如何在Chicken Scheme中可靠地获取脚本名称 似乎-ss会吃掉脚本名,所以除非我使用点斜杠来运行脚本,否则它是不可见的 scriptedmain.scm: #!/usr/bin/env csi -q (display (command-line-arguments)) (display "\n") (exit) 跟踪: $ ./scriptedmain.scm (-q ./scriptedmain.scm) wonko:Desktop andrew$ csi -ss script

如何在Chicken Scheme中可靠地获取脚本名称

似乎-ss会吃掉脚本名,所以除非我使用点斜杠来运行脚本,否则它是不可见的

scriptedmain.scm:

#!/usr/bin/env csi -q

(display (command-line-arguments))
(display "\n")
(exit)
跟踪:

$ ./scriptedmain.scm 
(-q ./scriptedmain.scm)
wonko:Desktop andrew$ csi -ss scriptedmain.scm 
()
(argv)
应该完成这项工作。例如:

#!/usr/local/bin/csi -script

(display (argv)) (newline) (exit)
打印
(/usr/local/bin/csi-script./test.scm)

scriptedmain.scm将在以下情况下运行(main)并打印程序名:

从解释器运行:

csi -ss scriptedmain.scm
使用shebangs从解释器运行:

./scriptedmain.scm
汇编:

csc -o scriptedmain scriptedmain.scm
./scriptedmain
添加到


这是一个延迟响应,因此可能对原始海报没有用处。但对于可能遇到此问题的任何其他人,简单的答案是使用参数:

(program-name)

这应该为所有情况返回正确的名称

差不多了!您必须为使用csc编译脚本的特殊情况添加代码;然后程序是(list ref(argv)0)。使用“script”我的意思是“未编译”。还有其他解决方案来区分解释程序和编译程序。迟做总比不做好。谢谢你,伙计!我的最新版本适用于除编译之外的所有情况。不知什么原因,它就放在那里。@mcandre:不知道你所说的“除已编译之外的所有案例”是什么意思。我在下面查看了您的示例scriptedmain.scm-使用程序名,它作为解释脚本或编译的本机可执行文件工作。顺便说一句,我不会为脚手架而烦恼(bash->csi)。其实不需要/usr/bin/env鸡肉计划#/usr/bin/csi-sBTW,我不会为这个脚手架而烦恼(bash->csi)。其实并不需要。把它放在~/.csirc:(repl中的register feature!)中,用以下任一选项启动脚本:#/usr/bin/env鸡肉计划#/usr/bin/csi-s,并以下面的代码块结束:(cond expand(在repl中;在这里做点什么)(else(main(命令行参数)))现在您的代码就可以工作了,无论您是将文件加载到repl中并交互开发,还是通过解释器以脚本的形式执行文件,或者将其编译为本机可执行文件并运行。对于代码格式,我很抱歉。我猜这些评论不尊重内联代码:(
(program-name)