How to run that depends critically on how exactly that checker.sh works. The issue is that the shell's source command works by reading the script and executing it within the current shell session (Tcl's source works similarly, but it's for a different language). Because it is in the same session, it has all sorts of access to capabilities that it effectively would not as a subprocess (or rather it would have them, but they wouldn't persist).
The simple way to run that from Tcl is this (assuming you're in the right directory):
exec sh checker.sh waiver.file
I would not be surprised if that has problems! Unfortunately, the set of possible problems is so thoroughly wide that it's extremely hard to guess how to resolve them ahead of time.
That said, the fact that you're getting a hang is useful information. That probably means that the script is trying to access standard in and out in ways that are not particularly happy with a pipeline. We can try resolving that with redirections:
exec sh checker.sh waiver.file <@stdin >@stdout 2>@stderr
If that doesn't work, you might need to run things using Expect. The expect program is Tcl, but with some extra commands. This might be enough to get you started:
spawn sh
send "source checker.sh waiver.file\r"
interact
There's an awful lot more to using Expect well.
(It's possible that rewriting checker.sh might be easier; the details matter utterly here.)
./checker.sh waiver.file?linkandRUNfor?checker.shexist in your path?