Algo como
compile && { test -f /path/to/dont_run || run; }
deve resolver seu problema. touch /path/to/dont_run
impediria que run
fosse executado. Você pode tornar isso mais complicado (e mais conveniente), por exemplo, definindo uma função de shell cond_run_cmd que faz alguma checagem como essa, limitada ao seu tty (para que você possa ter várias em paralelo) ou qualquer outra coisa.