Common Lisp имеет многострочные шебанги:
#!/bin/bash
#|
exec clisp -q -q $0 $0 ${1+"$@"}
exit
|#
Это позволяет выполнять более сложные операции внутри шебанга.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
, потому что Шебанг расширяется до factor ios7crypt.factor -help
.К сожалению, для Factor, по-видимому, требуются все параметры командной строки перед именем сценария.
Есть ли многострочный шебанг, перекрывающий это поведение?