Terminate the process, returning returnCode to the system as the exit status. If returnCode is not specified then it defaults to 0.
proc main {} {
    # ... put the real main code in here ...
}
if {[catch {main} msg options]} {
    puts stderr "unexpected script error: $msg"
    if {[info exist env(DEBUG)]} {
        puts stderr "---- BEGIN TRACE ----"
        puts stderr [dict get $options -errorinfo]
        puts stderr "---- END TRACE ----"
    }
    # Reserve code 1 for "expected" error exits...
    exit 2
}