5

Betiğin adını Tavuk Şeması'nda nasıl güvenilir bir şekilde alabilirim?

Görünüşe göre -ss betiğin ismini yazıyor, bu yüzden betiklerimi çalıştırmak için nokta vuruşunu kullanmadan görünür değil.

scriptedmain.scm:

#!/usr/bin/env csi -q 

(display (command-line-arguments)) 
(display "\n") 
(exit) 

İz:

$ ./scriptedmain.scm 
(-q ./scriptedmain.scm) 
wonko:Desktop andrew$ csi -ss scriptedmain.scm 
() 

cevap

6

Bu geç bir yanıttır, bu nedenle orijinal posterde kullanılmayabilir.

(program-name) 

Bu

tüm durumlar için doğru adı dönmelidir: Ama bu soruya rastlamak herhangi başkalarına, basit bir cevabı parametresini kullanmaktır. Docs here.

+0

Hiç geç olmamasından iyidir. Tesekkurler dostum! – mcandre

+0

Son sürümüm derlenmiş hariç tüm durumlar için çalışır. Bir sebepten ötürü orada oturuyor. – mcandre

+0

@mcandre: "Derlenenler hariç tüm durumlar" ile ne kastettiğinizden emin değilsiniz. Aşağıda scriptedmain.scm örneğinize baktım - programın adıyla ve yorumlanmış bir betik olarak veya derlenmiş bir yerel yürütülebilir dosya olarak çalışıyor. Btw, ben bu iskele ile uğraşmak olmaz (bash -> csi). Onun gerçekten gerekli değil #!/Usr/bin/env tavuk şeması #!/Usr/bin/csi -s –

1

(argv) iş yapmak gerekir. Örnek:

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

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

baskılar (/usr/local/bin/csi -script ./test.scm)

+0

Neredeyse! Komut dosyasının csc ile derlendiği özel durum için kod eklemeniz gerekir; sonra program (liste-ref (argv) 0). – mcandre

+0

"Komut dosyası" ile "derlenmedi" demek istiyorum. Yorumlandırılmış ve derlenmiş programlar arasında ayrım yapmak için başka çözümler vardır. – knivil

1

(ana) çalıştırın ve aşağıdaki durumlarda program ismini yazdırır scriptedmain.scm:

Çalıştır yorumlayıcıdan:

csi -ss scriptedmain.scm 

Run shebangs kullanarak yorumlayıcıdan:

./scriptedmain.scm 

Derleyen:

csc -o scriptedmain scriptedmain.scm 
./scriptedmain 

Eklendi GitHub için.

#!/bin/sh 
#| 
exec csi -ss $0 ${1+"[email protected]"} 
exit 
|# 

(define (main) 
    (display (format "Program: ~a\n" (program-name))) 
    (exit)) 

(if (not (equal? (program-name) "csi")) 
    (main))