0

Common Lisp 有多行 shebangs:

#!/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

上面的行应该 print t,但 Factor 忽略了-help,因为它出现在脚本名称之后。

$ factor ios7crypt.factor 
f

$ factor -help ios7crypt.factor 
t

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

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

4

1 回答 1

0

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

$ 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
于 2011-08-20T18:38:08.977 回答