Кажется, что лучшее, что можно сделать, это использовать 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.
]