5

我如何可靠地得到鸡计划的脚本名称?

似乎-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 
() 

回答

6

这是一个迟到的反应,所以可能不适用于原来的海报。但对于谁可能会遇到这个问题的任何人,答案很简单,使用参数:

(program-name) 

这应该适用于所有情况返回正确的名称。 Docs here.

+0

比从未更好的迟到。多谢,伙计! – mcandre 2011-09-12 04:07:11

+0

我的最新版本适用于除编译以外的所有情况。出于某种原因,它只是坐在那里。 – mcandre 2011-09-12 04:11:14

+0

@mcandre:不确定你的意思是“除编译以外的所有情况”。我查看了下面的示例脚本scriptedmain.scm - 使用程序名称,它可以作为解释脚本或编译的本机可执行文件运行。顺便说一句,我不会打扰那个脚手架(bash - > csi)。它不是真的需要#!/ usr/bin/env chicken-scheme #!/ usr/bin/csi -s – 2011-09-12 07:02:33

1

(argv)应该做的工作。例如:

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

(display (argv)) (newline) (exit) 

打印(/usr/local/bin/csi -script ./test.scm)

+0

差不多!您必须为使用csc编译脚本的特例添加代码;那么程序是(list-ref(argv)0)。 – mcandre 2011-03-05 21:01:09

+0

“脚本”我的意思是“不编译”。还有其他解决方案来区分解释和编译的程序。 – knivil 2011-03-06 13:02:27

1

scriptedmain.scm将运行(主)和在下列情况下打印该程序名:从解释

执行命令

csi -ss scriptedmain.scm 

润从翻译使用shebangs:

./scriptedmain.scm 

编译:

csc -o scriptedmain scriptedmain.scm 
./scriptedmain 

加入GitHub

#!/bin/sh 
#| 
exec csi -ss $0 ${1+"[email protected]"} 
exit 
|# 

(define (main) 
    (display (format "Program: ~a\n" (program-name))) 
    (exit)) 

(if (not (equal? (program-name) "csi")) 
    (main))