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覆盖此行为?
答案 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