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 powerful 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. >
