因子有多线shebangs吗?

时间:2011-08-20 16:51:06

标签: multiline getopt shebang factor-lang

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

以上行应打印t,但因素会忽略-help,因为它出现在脚本名称之后。

$ factor ios7crypt.factor 
f

$ factor -help ios7crypt.factor 
t

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

是否存在多线shebang覆盖此行为?

1 个答案:

答案 0 :(得分: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