0

CommonLispには複数行のシバンがあります。

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

これにより、シバン内でより複雑な操作が可能になります。CLISPは、ARGVからスクリプト名を省略した数少ない言語の1つです。ここでは、LispスクリプトがARGVを介してスクリプト名にアクセスできるように、スクリプト名がCLISPに2回強制的に送信されます。

以下が機能するように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

上記の行は出力されるはずですが、Factorはスクリプト名の後にあるため、t無視します。-help

$ factor ios7crypt.factor 
f

$ factor -help ios7crypt.factor 
t

これ-helpは、スクリプト名の前に送信されたために機能します。シェバンがに拡大するため、./ios7crypt.factor -help静かにドロップします。残念ながら、Factorはスクリプト名の前にすべてのコマンドラインオプションを必要としているようです。-helpfactor ios7crypt.factor -help

この動作をオーバーライドする複数行のシバンはありますか?

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 に答える