Есть ли у Chicken Scheme эквивалент Perl в $ 0? - PullRequest
5 голосов
/ 04 марта 2011

Как я могу надежно получить имя сценария в 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 ]

6 голосов
/ 12 сентября 2011

Это поздний ответ, поэтому он может быть бесполезен для оригинального постера.Но для всех остальных, кто может столкнуться с этим вопросом, простой ответ заключается в использовании параметра:

(program-name)

Это должно вернуть правильное имя для всех ситуаций. Документы здесь.

1 голос
/ 06 марта 2011

scriptedmain.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))
1 голос
/ 04 марта 2011

(argv) должен сделать работу.Пример:

#!/usr/local/bin/csi -script

(display (argv)) (newline) (exit)

печать (/usr/local/bin/csi -script ./test.scm)

...