5

如何可靠地获取 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 
()
4

3 回答 3

6

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

(program-name)

这应该为所有情况返回正确的名称。文档在这里。

于 2011-09-11T22:58:33.030 回答
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))
于 2011-03-05T22:04:29.417 回答
1

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

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

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

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

于 2011-03-04T07:18:35.300 回答