Factor 是否有多行 shebang?

发布于 2024-11-30 14:15:42 字数 1062 浏览 2 评论 0原文

Common Lisp 具有多行 shebang:

#!/bin/bash
#|
exec clisp -q -q $0 $0 ${1+"$@"}
exit
|#

这允许在 shebang 内进行更复杂的操作。 CLISP 是少数从 ARGV 中省略脚本名称的语言之一。这里,脚本名称被强制发送两次到 CLISP,以便 Lisp 脚本可以通过 ARGV 访问其脚本名称。

有没有办法在 Factor 中做到这一点,以便以下工作有效?

$ cat ios7crypt.factor 
#! /usr/bin/env factor

USING: kernel namespaces io prettyprint ;
IN: ios7crypt

: usage ( -- )
    "Usage: ios7crypt.factor [options]" print
    "-encrypt <password>" print
    "-decrypt <hash>" print
    "-test" print
    "-help" print ;

: main ( -- ) "help" get . ;

MAIN: main

$ ./ios7crypt.factor
f

$ ./ios7crypt.factor -help
f

上面的行应该打印 t,但 Factor 会忽略 -help,因为它位于脚本名称之后。

$ factor ios7crypt.factor 
f

$ factor -help ios7crypt.factor 
t

这是有效的,因为 -help 是在脚本名称之前发送的。 ./ios7crypt.factor -help 默默地删除 -help,因为 shebang 扩展为 factor ios7crypt.factor -help。不幸的是,Factor 似乎需要脚本名称之前的所有命令行选项。

是否有多行 shebang 覆盖此行为?

Common Lisp has multiline shebangs:

#!/bin/bash
#|
exec clisp -q -q $0 $0 ${1+"$@"}
exit
|#

This allows more complex operations within a shebang. CLISP is one of the few languages that omits the script name from ARGV. Here, the script name is forcibly sent twice to CLISP so that the Lisp script can access its script name via ARGV.

Is there a way to do this in Factor so that the following works?

$ cat ios7crypt.factor 
#! /usr/bin/env factor

USING: kernel namespaces io prettyprint ;
IN: ios7crypt

: usage ( -- )
    "Usage: ios7crypt.factor [options]" print
    "-encrypt <password>" print
    "-decrypt <hash>" print
    "-test" print
    "-help" print ;

: main ( -- ) "help" get . ;

MAIN: main

$ ./ios7crypt.factor
f

$ ./ios7crypt.factor -help
f

The above line should print t, but Factor ignores -help because it came after the script name.

$ factor ios7crypt.factor 
f

$ factor -help ios7crypt.factor 
t

This works because -help was sent before the script name. ./ios7crypt.factor -help silently drops -help because the shebang expands to factor ios7crypt.factor -help. Unfortunately, Factor seems to require all command line options before the script name.

Is there a multiline shebang overriding this behavior?

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

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

发布评论

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

评论(1

暮年慕年 2024-12-07 14:15:42

发送到脚本的命令行选项不会自动解析。必须手动将它们发送到解析器。

$ cat args.factor 
#! /usr/bin/env factor

USING: namespaces command-line prettyprint ;
IN: args

: main ( -- )
    command-line get parse-command-line
    "a" get .
    "b" get .
    "c" get .
    ;

MAIN: main

例子:

$ ./args.factor -a -b=banana
t
"banana"
f

Command line options sent to a script are not automatically parsed. One must manually send them to the parser.

$ cat args.factor 
#! /usr/bin/env factor

USING: namespaces command-line prettyprint ;
IN: args

: main ( -- )
    command-line get parse-command-line
    "a" get .
    "b" get .
    "c" get .
    ;

MAIN: main

Example:

$ ./args.factor -a -b=banana
t
"banana"
f
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文