Não vejo isso na página man, mas o código-fonte verifica se o programa é invocado como tcsh
ou não. Se for , o código define o prompt conforme observado na pergunta:
HIST = '!'; HISTSUB = '^'; PRCH = tcsh ? '>' : '%'; /* to replace %# in $prompt for normal users */ PRCHROOT = '#'; /* likewise for root */ word_chars = STR_WORD_CHARS; bslash_quote = 0; /* PWP: do tcsh-style backslash quoting? */
A lógica do programa é bastante fácil de ler:
{ char *t; t = strrchr(argv[0], '/'); #ifdef WINNT_NATIVE { char *s = strrchr(argv[0], '\'); if (s) t = s; } #endif /* WINNT_NATIVE */ t = t ? t + 1 : argv[0]; if (*t == '-') t++; progname = strsave((t && *t) ? t : tcshstr); /* never want a null */ tcsh = strncmp(progname, tcshstr, sizeof(tcshstr) - 1) == 0; }
e
static const char tcshstr[] = "tcsh";
Por isso, não passaria no teste se fosse nomeado tcsh10
, por exemplo.