Есть ли у Chicken Scheme эквивалент Perl в $0?
Как я могу надежно получить имя сценария в Chicken Scheme?
Кажется, что -ss съедает имя сценария, поэтому оно не отображается, если я не использую косую черту для запуска своих сценариев.
scriptedmain.scm:
#!/usr/bin/env csi -q
(display (command-line-arguments))
(display "\n")
(exit)
Трассировка:
$ ./scriptedmain.scm
(-q ./scriptedmain.scm)
wonko:Desktop andrew$ csi -ss scriptedmain.scm
()
3 ответа
Решение
Это запоздалый ответ, поэтому он может не пригодиться оригинальному постеру. Но для всех остальных, кто может столкнуться с этим вопросом, простой ответ - использовать параметр:
(program-name)
Это должно вернуть правильное имя для всех ситуаций. Документы здесь.
(argv)
должен сделать работу. Пример:
#!/usr/local/bin/csi -script
(display (argv)) (newline) (exit)
печать (/usr/local/bin/csi -script ./test.scm)
Файл scripttedmain.scm запустится (main) и напечатает имя программы в следующих случаях:
Беги от переводчика:
csi -ss scriptedmain.scm
Беги от переводчика, используя шебанги:
./scriptedmain.scm
Составитель:
csc -o scriptedmain scriptedmain.scm
./scriptedmain
Добавлено в GitHub.
#!/bin/sh
#|
exec csi -ss $0 ${1+"$@"}
exit
|#
(define (main)
(display (format "Program: ~a\n" (program-name)))
(exit))
(if (not (equal? (program-name) "csi"))
(main))