Из того, что я понимаю из документов (выделение мое):
Опции -? , -help и - понятны неявно. Обработка первых двух параметров отмены путем выдачи ошибки и принудительной генерации сообщения об использовании , тогда как обработка последнего параметра прерывания обрабатывается без ошибки, оставляя все аргументы после обычной обработки , даже если начинаются с тире.
с помощью -help или -? будет всегда выдавать ошибку.
Далее в документах вы можете увидеть пример, где try { ... } trap { ... }
используется в сочетании с ::cmdline::getoptions
, что может быть тем, как вы хотите это сделать:
try {
array set params [::cmdline::getoptions ::argv $options $usage]
} trap {CMDLINE USAGE} {msg o} {
# Trap the usage signal, print the message, and exit the application.
# Note: Other errors are not caught and passed through to higher levels!
puts $msg
exit 1
}