如何在GNU Smalltalk中获取当前模块/脚本/文件名?

时间:2011-08-05 23:47:12

标签: filenames smalltalk gnu-smalltalk

GNU Smalltalk省略了argv中的脚本名称。

#!/usr/bin/env gst -f

| argv program |

argv := Smalltalk arguments.

(argv size) > 0 ifTrue: [
    program := argv at: 1.

    Transcript show: 'Program: ', program; cr.
] ifFalse: [
    Transcript show: 'argv = {}'; cr.
]

$ ./scriptname.st
argv = {}

我看到两种获取脚本名称的方法:

  • 跟踪一些Smalltalk方法,该方法返回类似于Perl变量$0的脚本名称。
  • 跟踪多行shebang的语法并强制GST将脚本名作为argv的第一个成员提供。以下是Common Lisp中的示例。

2 个答案:

答案 0 :(得分:1)

似乎最好的办法是使用shebangs强制脚本名称为ARGV,然后检查Smalltalk getArgv: 1是否以硬编码字符串结尾。

发布在此处和Rosetta Code

"exec" "gst" "-f" "$0" "$0" "$@"
"exit"

Object subclass: ScriptedMain [
    ScriptedMain class >> meaningOfLife [ ^42 ]
]

| main |

main := [
    Transcript show: 'Main: The meaning of life is ', ((ScriptedMain meaningOfLife) printString); cr.
].

(((Smalltalk getArgc) > 0) and: [ ((Smalltalk getArgv: 1) endsWith: 'scriptedmain.st') ]) ifTrue: [
    main value.
]

答案 1 :(得分:1)

您可以询问当前的方法来源:thisContext method methodSourceFile printNl

相关问题