We could put this in the collaborative book.
Alberto, let me know if you want a user ;)
Thanks Alberto
Documentation and sharing are underestimated in our community. What is simple for you may be complex for somebody else and the inverse,
we are all more poWewerful together :)
Stef
On Nov 16, 2011, at 9:25 AM, Alberto Bacchelli wrote:
>
> St�phane Ducasse wrote:
>>
>> can you give an example so that people can learn too?
>>
>
> Sure.
>
> So I have a simple bash script that calls the vm, the image, and the script:
>
> ----------------bash script-----------
> #!/bin/bash
>
> export AN_ENVIRONMENT_VARIABLE=somevalue
> export SCRIPT_LOG_FILE=afilename
>
>
> "$pharovm_dir"/squeak -plugins "$pharovm_dir" -encoding Latin1 -headless
> "$pharo_image" "$smalltalk_script" && exit 0
> echo Something bad happened!
> exit 1
> ----------------------------------------
>
> the $smalltalk_script is an .st file with the code to be executed (an
> example later).
> environment variables, such as AN_ENVIRONMENT_VARIABLE and SCRIPT_LOG_FILE,
> are useful to pass some info to the smalltalk script in an easy way, here we
> use SCRIPT_LOG_FILE to save some script's output to a file.
>
> Here I put a very simple example based on what I did:
>
>
> ----------------pharo script (aka $smalltalk_script)-----------
> [| fs environment pid |
> environment := OSProcess thisOSProcess environment.
> pid := OSProcess thisOSProcess pid.
>
> someValue := (environment at: 'AN_ENVIRONMENT_VARIABLE').
> fs := FileStream forceNewFileNamed: (environment at: 'SCRIPT_LOG_FILE').
>
> loggingBlock := [:message |
> � � � fs nextPutAll: TimeStamp now asString, ' [', pid asString, '] ' .
> � � � fs nextPutAll: message; nextPut: Character lf.].
>
> loggingBlock value: 'Starting script with ', someValue.
>
> "do some interesting stuff here"
> "..."
>
> Smalltalk snapshot: false andQuit: true.] on: Error do: [:err | OSProcess
> thisOSProcess stdErr nextPutAll: err asString; nextPut: Character lf.
> Smalltalk snapshot: false andQuit: true.]
> ------------------------------------------
>
> A few comments:
> - with "OSProcess thisOSProcess environment" you can access environment
> variables as a dictionary (that's why I use them instead of command line
> arguments)
> - "OSProcess thisOSProcess pid" gives you the pid of your process, in this
> way I can make a unix-like log file
> - "Smalltalk snapshot: false andQuit: true." closes the image correctly at
> the end of your script and does NOT save the state on the image.
> - "[...] on: Error do: [:err | OSProcess thisOSProcess stdErr nextPutAll:
> err asString; nextPut: Character lf. Smalltalk snapshot: false andQuit:
> true.]" is _VERY_ useful to debug your code. Any time there is an error in
> the main block, it catches it and prints the message to the console using
> the standard error. This is essential to be able not to spend ages in trying
> to understand what went wrong with your script.
>
> That's all. I hope it's useful to someone.
>
> Cheers,
> Alberto
>
>
> --
> View this message in context: http://forum.world.st/Headless-PetitParser-tp3994446p4075649.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>