鸡肉计划是否相当于Perl的0美元?

时间:2011-03-04 00:46:35

标签: 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 scriptedmain.scm 
()

3 个答案:

答案 0 :(得分:6)

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

(program-name)

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

在以下情况下,

scriptedmain.scm将运行(main)并打印程序名称:

从解释器运行:

csi -ss scriptedmain.scm

使用shebangs从解释器运行:

./scriptedmain.scm

编译:

csc -o scriptedmain scriptedmain.scm
./scriptedmain

已添加到GitHub

#!/bin/sh
#|
exec csi -ss $0 ${1+"$@"}
exit
|#

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

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