Chicken Scheme 是否有相当于 Perl 的 $0 的东西?

发布于 2024-10-20 05:43:12 字数 351 浏览 7 评论 0原文

如何可靠地获取ChickenScheme中的脚本名称?

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

How can I reliably get the script name in Chicken Scheme?

It seems that -ss eats up the script name, so it's not visible unless I use dot slash to run my scripts.

scriptedmain.scm:

#!/usr/bin/env csi -q

(display (command-line-arguments))
(display "\n")
(exit)

Trace:

$ ./scriptedmain.scm 
(-q ./scriptedmain.scm)
wonko:Desktop andrew$ csi -ss scriptedmain.scm 
()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

平定天下 2024-10-27 05:43:12

这是一个较晚的回复,因此可能对原始发布者没有用处。但对于任何其他可能遇到这个问题的人来说,简单的答案是使用参数:

(program-name)

这应该在所有情况下返回正确的名称。 此处的文档。

This is a late response, so may not be of use to the original poster. But to any others who may come across this question, the simple answer is to use the parameter:

(program-name)

This should return the correct name for all situations. Docs here.

む无字情书 2024-10-27 05:43:12

(argv) 应该可以完成这项工作。示例:

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

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

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

(argv) should do the job. Example:

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

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

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

各自安好 2024-10-27 05:43:12

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))

scriptedmain.scm will run (main) and print the program name in the following cases:

Run from the interpreter:

csi -ss scriptedmain.scm

Run from the interpreter using shebangs:

./scriptedmain.scm

Compiled:

csc -o scriptedmain scriptedmain.scm
./scriptedmain

Added to 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))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文